Подтвердить что ты не робот

Могу ли я ssh где-нибудь, запустить некоторые команды, а затем оставить себе подсказку?

Мне нужно войти в систему на разных серверах, установить переменные среды, а затем работать в интерактивном режиме.

например.

$ ssh anvil
[email protected]$ export V=hello
[email protected]$ export W=world
[email protected]$ echo $V $W
hello world

Как я могу объединить первые несколько команд, а затем оставить себя в подсказке?

Что-то вроде:

$ ssh anvil --on-login 'export V=hello; export W=world;'
[email protected]$ echo $V $W
hello world

Очевидно, что это модельная проблема. То, что я действительно спрашиваю, это "как сделать ssh на другой машине, запустить некоторые команды, а затем продолжить, как если бы я запускал их вручную?"

4b9b3361

Ответ 1

Возможно, самое простое:

$ ssh -t host 'cmd1; cmd2; sh -i'

Если вы хотите установить переменные, выполните:

$ ssh -t host 'cmd1; cmd2; FOO=hello sh -i'

Обратите внимание, что это ужасный взлом, и вам было бы намного лучше поставить желаемые начальные команды в script и сделать:

$ scp setup host:~
$ ssh host
host$ . setup

Ответ 2

Вы также можете использовать следующие expect script:

#!/usr/bin/expect -f
spawn ssh $argv
send "export V=hello\n"
send "export W=world\n"
send "echo \$V \$W\n"
interact

Ответ 4

Следует отметить, что ssh -t может быть фактически использован для подключения к одному хосту через другой хост.

Так, например, если вы хотите выполнить команду на anvil, но наковальня доступна только из шлюза хоста (через брандмауэр и т.д.), вы можете сделать так:

ssh gateway -t 'ssh anvil -t "export V=hello; export W=world;bash -l";'

Выход из наковальни также выведет вас из шлюза (если вы хотите остаться на gatway после ухода с наковальни, чем просто добавить еще один bash -l перед тем, как закрыть команду.