Respostas:
Por padrão, quando você executa um comando na máquina remota usando ssh, um TTY não é alocado para a sessão remota. Isso permite transferir dados binários, etc., sem precisar lidar com peculiaridades do TTY. Este é o ambiente fornecido para o comando executado computerone.
No entanto, quando você executa o ssh sem um comando remoto, ele aloca um TTY, porque é provável que você esteja executando uma sessão de shell. Isso é esperado pelo ssh otheruser@computertwo.comcomando, mas devido à explicação anterior, não há TTY disponível para esse comando.
Se você deseja um shell computertwo, use-o, o que forçará a alocação de TTY durante a execução remota:
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
Isso geralmente é apropriado quando você está executando um shell ou outro processo interativo no final da cadeia ssh. Se você estava indo para transferir dados, não é apropriado nem necessário adicionar -t, mas todos os comandos ssh conteriam um comando de produção ou consumo de dados, como:
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
Existe uma maneira melhor de usar o SSH como um relé: use a ProxyCommandopção Você precisará ter uma chave na máquina cliente que permita efetuar login no segundo computador (chave pública é a maneira recomendada de usar SSH na maioria das circunstâncias). Coloque isso no seu ~/.ssh/confige execute 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 . Qualquer uma das várias versões disponíveis servirá.
Você pode usar a opção PROXY Jump no 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.
Portanto, se eu precisar me conectar ao hostB, mas preciso passar pelo hostA primeiro para chegar lá. Normalmente eu faria
ssh hostA
[user@hostA ~]$ ssh hostB
Agora faço isso
ssh -J hostA hostB
[user@hostB ~]$
Você pode substituir uma opção de configuração SSH "RequestTTY" na linha de comando.
Meu exemplo de trabalho cd-serv-one.shcomeça /bin/bashna sessão SSH após executar vários comandos:
#!/bin/bash
ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"
E agora eu apenas corro ./cd-serv-one.shpara iniciar uma sessão SSH necessária.
ssh!