Добавьте открытый ключ (id_[rd]sa.pub
) для Вашей исходной машины (откуда Вы - sshing) до ~/.ssh/authorized_keys
файл целевого сервера для имени пользователя Вы хотите к ssh в. При потере открытого ключа Вы захотите создать новый с ssh-keygen
. Используя параметры по умолчанию для этого должен быть хорошо для большинства целей. При необходимости в более подробных инструкциях существуют тысячи учебных руководств, которые можно погуглить.
Когда Вы работаете ssh example.com
, ssh демон запускает оболочку входа в систему для Вас, и оболочка входа в систему читает Ваш ~/.profile
(или ~/.bash_profile
или ~/.zprofile
или ~/.login
в зависимости от Вашей оболочки входа в систему). Когда Вы указываете команду для выполнения удаленно (с или без -t
), ssh демон запускает обычную оболочку, таким образом, Ваш .profile
не читается. Средство:
ssh example.com -t '. /etc/profile; . ~/.profile; tmux attach'
Большинство ssh демонов настроено для отказа от переменных среды передачи за исключением LC_*
. Если ssh демон на example.com
позволяет его, можно злоупотребить пользовательским LC_*
переменная для запуска tmux автоматически — вставила это Ваш ~/.profile
:
if [ -n "$LC_tmux_session" ] && tmux has -t "$LC_tmux_session"; then
exec tmux attach -t "$LC_tmux_session"
elif [ -n "${LC_tmux_session+1}" ] && tmux has; then
exec tmux attach
fi
затем войдите в систему с LC_tmux_session= ssh example.com
или LC_tmux_session=session_name ssh example.com
.
Этот ответ имеет больше информации о передающих переменных среды по ssh.
Я ранее советовал устанавливать PermitUserEnvironment yes
и включение переменной среды Ваш ~/.ssh/environment
до Eli Heady, внесенного с лучшим предложением в комментариях ниже.
Откройте Ваш .zlogin
(удар: .bash_profile
и т.д.) и помещенный следующее:
if [[ "$SSH_CONNECTION" != "" && "$MY_SSH_CONNECTION" != "yes" ]]; then
while true; do
echo -n "Do you want to attach to a tmux session? [y/n]"
read yn
case $yn in
[Yy]* ) MY_SSH_CONNECTION="yes" tmux attach; break;;
[Nn]* ) break;;
* ) echo "Please answer y/n";;
esac
done
fi
Вдохновение, взятое от: Как я запрашиваю вход в сценарии оболочки Linux?
Обратите внимание, что я использовал .zlogin
файл, но Вы могли использовать Ваш .zshrc
файл, но мне нравится сохранять мой dotfiles опрятным, и он разделяет его так, я могу использовать его на других машинах.
Замените вопрос чем-то подходящим для себя и замены MY_SSH_CONNECTION="yes" tmux attach
с чем Вы хотите работать в той точке.
Отметьте, как сценарий устанавливает MY_SSH_CONNECTION="yes"
прежде tmux attach
для передачи его до tmux как, он также будет открывать оболочку, которая получит доступ к тому же самому сценарию выше и предотвратит любую рекурсию.
if [[ "$SSH_CONNECTION" != "" ]]
должен сделать это.
– Eli Heady
22.03.2011, 14:42
Самостоятельно, я добавляю это к своим .bash_profile файлам:
if [ -z "$STY" ]; then
reattach() { exec screen -A -D -RR ${1:+"$@"} ; }
fi
if [ -t 0 ]; then
screen -wipe
echo 'starting screen... (type Ctrl-C to abort)'
sleep 5 && reattach
fi
Это дает мне некоторое время для прерывания повторного прикрепления к или создания экранной сессии. Это не продолжит работать 'ssh системные форматы' команды (который не называет ~/. *profile). Функция оболочки настраивается, чтобы повторно прикрепить, если я прерываюсь.
Вы могли бы рассмотреть выполнение
ssh remotehost -t screen -DR
и выполненный Ваш терминальный сеанс там. Можно затем отсоединиться (^A^D
) и повторно прикрепите позже (от другого клиента также). Это заставит проблему с неинтерактивной инициализацией уйти, поскольку экран сохраняет полные сессии интерактивного терминала (дополнительно оболочки входа в систему также, man screen
(1) или ^A?
)
-t 'tmux attach'
У меня есть проблемы с энергией, которые обычно не присутствуют. Поэтому реальный вопрос о запущении скриптов на подключении ssh, а не экране/управлении сеансами. Извинения за то, что не были более ясными в моем вопросе
– connrs
23.03.2011, 11:44
Говорить с проблемами UTF-8 а именно, если Вы добавляете
SendEnv LANG
И $LANG
установлен на что-то как en_US.UTF-8
на местном конце и Вашем sshd на удаленном конце разрешает SendEnv
директива (с AcceptEnv
в sshd_config
), tmux на другом конце должен соблюдать его. У меня была эта проблема некоторое время, и было трудно диагностировать.
Если Вы хотите, чтобы это работало каждый раз, когда Вы соединяетесь, Вы могли бы просто добавить tmux attach
к нижней части Вашего ~/.profile
на удаленной машине.
ssh example.com -t 'tmux attach'
не то, потому что это имеет проблемы при загрузке моей среды, а потому что у меня были проблемы с символьным дисплеем UTF-8; эта проблема не существует при соединении стандартным способом. Поэтому этот вопрос о запущении скриптов сразу после соединения по SSH. – connrs 23.03.2011, 11:17.profile
? Я предположил, что проблема была должна неправильно установить локали на целевой машине, который Ваш/etc/profile
или.profile
фиксированный. Проблема локали является, вероятно, закрепляемой с большей информацией. – Gilles 'SO- stop being evil' 23.03.2011, 21:33