Ответы:
По умолчанию, когда вы запускаете команду на удаленном компьютере с помощью ssh, TTY не выделяется для удаленного сеанса. Это позволяет передавать двоичные данные и т. Д. Без необходимости работать с причудами TTY. Это среда, предусмотренная для команды, выполняемой на computerone
.
Однако, когда вы запускаете ssh без удаленной команды, он выделяет TTY, потому что вы, скорее всего, будете запускать сеанс оболочки. Это ожидается ssh otheruser@computertwo.com
командой, но из-за предыдущего объяснения для этой команды нет доступного TTY.
Если вы хотите включить оболочку computertwo
, используйте это вместо этого, что приведет к выделению TTY во время удаленного выполнения:
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
Это обычно подходит, когда вы в конце концов запускаете оболочку или другой интерактивный процесс в конце цепочки ssh. Если вы собираетесь передавать данные, добавлять их не нужно и не нужно -t
, но тогда каждая команда ssh будет содержать команду создания данных или -consuming, например:
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
Есть лучший способ использовать SSH в качестве реле: используйте ProxyCommand
опцию. Вам понадобится ключ на клиентском компьютере, который позволит вам войти на второй компьютер (открытый ключ в любом случае является рекомендуемым способом использования SSH). Положи это в свой ~/.ssh/config
и беги ssh computertwo
.
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
nc
это netcat . Подойдет любая из нескольких доступных версий.
Вы можете использовать опцию PROXY Jump в SSH
-J [user@]host[:port]
Connect to the target host by first making a ssh connection to the jump host and then establishing a TCP forwarding to the ultimate destination from there. Multiple jump hops may be specified
separated by comma characters. This is a shortcut to specify a ProxyJump configuration directive.
Поэтому, если мне нужно подключиться к hostB, но сначала мне нужно пройти через hostA. Обычно я бы
ssh hostA
[user@hostA ~]$ ssh hostB
Я сейчас делаю это
ssh -J hostA hostB
[user@hostB ~]$
Вы можете переопределить опцию конфигурации SSH «RequestTTY» из командной строки.
Мой рабочий пример cd-serv-one.sh
начинается /bin/bash
в сеансе SSH после выполнения нескольких команд:
#!/bin/bash
ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"
А сейчас я просто запускаю ./cd-serv-one.sh
необходимый сеанс SSH.
ssh
!