Могу ли я 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 на другой машине, запустить некоторые команды, а затем продолжить, как если бы я запускал их вручную?"
Ответы
Ответ 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
Ответ 3
Оказывается, на этот вопрос отвечает:
Как я могу передать ssh непосредственно в конкретный каталог?
в ssh:
ssh -t anvil "export V=hello; export W=world; bash"
а затем:
[email protected]$ echo $V $W
hello world
Ответ 4
Следует отметить, что ssh -t
может быть фактически использован для подключения к одному хосту через другой хост.
Так, например, если вы хотите выполнить команду на anvil, но наковальня доступна только из шлюза хоста (через брандмауэр и т.д.), вы можете сделать так:
ssh gateway -t 'ssh anvil -t "export V=hello; export W=world;bash -l";'
Выход из наковальни также выведет вас из шлюза (если вы хотите остаться на gatway после ухода с наковальни, чем просто добавить еще один bash -l
перед тем, как закрыть команду.