Я ищу способ автоматически определять некоторые псевдонимы внутри моего сеанса на любом сервере, на который я использую ssh. Я не могу положить их в .bashrc
файлы на сервере, потому что учетные записи пользователей, с которыми я вхожу, используются другими людьми, и, кроме того, их десятки, и поддерживать сценарий на каждой машине было бы болезненно. Я знаю, что могу использовать expect
для автоматического ввода псевдонимов, но мне просто было интересно, есть ли в OpenSSH что-нибудь встроенное, что можно было бы использовать для этого?
Нет ничего плохого в том, чтобы делать это в ожидании. Другой способ, которым я это сделал, тоже довольно грязный, со скриптом, сначала scp профиль, который вы хотите запустить, затем ssh, запустите его и оставайтесь на связи.
Итак, поместите все настройки профиля в локальный файл .<local username>-<hostname>-init.sh
, и запустите приведенный ниже сценарий, чтобы войти на удаленный хост.
#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"
Вы можете поместить свою конфигурацию в .bashrc
и позволять им выполняться только при входе в систему. Чтобы сделать это возможным, вы можете передать переменную среды через ssh.
.bashrc
модификации
# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
# my personal cool stuff
fi;
# other global stuff
sshd_config
модификации:
AcceptEnv ... IAMTHEGREATEST
.ssh/config
модификации (на стороне клиента):
Host ...
SendEnv IAMTHEGREATEST
.bashrc
модификации (на стороне клиента):
alias ssh='IAMTHEGREATEST="forsure" ssh'
(не проверено, но должно быть)
Из ssh (1) страница руководства, если вы создаете файл ~ / .ssh / rc, он будет выполнен ДО того, как будет запущена оболочка входа пользователя, что даст возможность выполнить задачи «предварительной настройки» перед входом в систему ... приведенный пример заключался в монтировании сетевых ресурсов перед входом в систему.
Если вы не хотите использовать индивидуальный ~ / .ssh / rc файлы, вы можете сделать то же самое с / и т. д. / ssh / sshrc. Быстрый тест для проверки вашего конкретного имени пользователя или какого-либо метода идентификации может запретить другим даже заметить, что это было на месте.
/ и т. д. / ssh / sshrc ТОЛЬКО если ~ / .ssh / rc не существует, поэтому вы можете эффективно достичь двух уровней сложности.
Псевдонимы определяются и интерпретируются оболочкой.
К сожалению, нет возможности ssh
чтобы передать их удаленной оболочке.
Вы могли бы написать ssh
оболочка на стороне клиента, которая создает приятную среду на удаленной стороне, но это было бы некрасиво.
Если возможно, я бы сохранил небольшой скрипт, который инициализирует / определяет все, что вы хотите, на сервере, доступном отовсюду, и выполняю его после входа в систему на каждом сервере.
Одним из возможных решений было бы разместить ваш скрипт, который настраивает все на веб-сервере, к которому все остальные серверы могут получить доступ.
Тогда каждому серверу просто понадобится небольшой скрипт, чтобы сделать что-то вроде:
wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh
Таким образом, вам нужно будет обновить его только в одном месте.
Посмотрите на .ssh / config
Вот пример https://lookherefirst.wordpress.com/2007/12/17/a-simple-ssh-config-file/