Próbuję połączyć się z maszyną pierwszą za pomocą ssh, a następnie połączyć się z inną maszyną drugą za pomocą ssh, ale otrzymuję ten błąd.
ssh [email protected] 'ssh [email protected]'
stdin: is not a tty
Dlaczego?
command-line
ssh
terminal
Jhonathan
źródło
źródło
ssh
!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 [email protected]
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: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:źródło
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 biegnijssh computertwo
.nc
jest netcat . Wystarczy jedna z kilku dostępnych wersji.źródło
Oczekuje interaktywnego terminala na urządzeniu tty na serwerze pośrednim.
Jeśli wypróbujesz to polecenie, powinno działać:
Zobacz
man ssh
za-t
opcję.źródło
Rozwiązałem to, dodając RequestTTY Yes do mojego pliku konfiguracyjnego ssh znajdującego się w ~ / .ssh / config w ten sposób ...
źródło
Możesz użyć opcji PROXY Jump w ssh
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ł
Teraz to robię
źródło
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ń:A teraz po prostu biegnę,
./cd-serv-one.sh
by rozpocząć potrzebną sesję SSH.źródło