Odpowiedzi:
Domyślnie po uruchomieniu polecenia na zdalnym komputerze za pomocą ssh TTY nie jest przydzielany dla sesji zdalnej. Umożliwia to przesyłanie danych binarnych itp. Bez konieczności zajmowania się dziwactwami TTY. Jest to środowisko przewidziane dla polecenia wykonanego w dniu computerone
.
Jednak gdy uruchomisz ssh bez polecenia zdalnego, przydziela TTY, ponieważ prawdopodobnie prowadzisz sesję powłoki. Jest to oczekiwane przez ssh otheruser@computertwo.com
polecenie, ale z powodu poprzedniego wyjaśnienia nie ma dostępnego TTY dla tego polecenia.
Jeśli chcesz włączyć powłokę computertwo
, użyj jej zamiast tego, co wymusi alokację TTY podczas zdalnego wykonywania:
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
Jest to zwykle odpowiednie, gdy ostatecznie uruchamiasz powłokę lub inny interaktywny proces na końcu łańcucha ssh. Jeśli miałbyś przesyłać dane, nie jest ani właściwe, ani wymagane dodawanie -t
, ale wtedy każde polecenie ssh zawierałoby polecenie generujące lub zużywające dane, takie jak:
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
Jest lepszy sposób na użycie SSH jako przekaźnika: skorzystaj z ProxyCommand
opcji. Musisz mieć klucz na komputerze klienckim, który pozwala zalogować się na drugim komputerze (klucz publiczny jest i tak zalecanym sposobem korzystania z SSH w większości przypadków). Włóż to ~/.ssh/config
i biegnij ssh computertwo
.
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
nc
jest netcat . Wystarczy jedna z kilku dostępnych wersji.
Możesz użyć opcji PROXY Jump w 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.
Więc jeśli muszę połączyć się z hostem B, ale najpierw muszę przejść przez hostA, aby się tam dostać. Normalnie bym to zrobił
ssh hostA
[user@hostA ~]$ ssh hostB
Teraz to robię
ssh -J hostA hostB
[user@hostB ~]$
Możesz zastąpić opcję konfiguracji SSH „RequestTTY” z wiersza poleceń.
Mój działający przykład cd-serv-one.sh
zaczyna się /bin/bash
w sesji SSH po uruchomieniu wielu poleceń:
#!/bin/bash
ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"
A teraz po prostu biegnę, ./cd-serv-one.sh
by rozpocząć potrzebną sesję SSH.
ssh
!