Псевдотермінал не буде виділено, оскільки stdin не є терміналом


14

Я намагаюся налаштувати автоматичний перехід SSH через сервер, на якому немає nc.

Це працює з командного рядка:

ssh -A gateway ssh steve@target

(Я додав свій відкритий ключ до агента SSH).

Однак додавання його до ~ / .ssh / config не означає:

Host target
  User steveb
  ProxyCommand ssh -A gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

Спроба змусити вирішити проблему -tкумедно, але не допомагає.

ProxyCommand ssh -A -t gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

Більше -t? Не добре.

ProxyCommand ssh -A -t -t gateway ssh steve@targetip

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

Чи можливо це? Більшість навчальних посібників (наприклад, http://www.arrfab.net/blog/?p=246 ) пропонують використовувати nc.


Чи є висновок про необхідність netcat?
MountainX

Виглядає так. У цьому випадку мені вдалося встановити це, вирішивши свою проблему - але я не завжди маю таку розкіш.
Стів Беннетт

Дивіться мою відповідь нижче щодо двох способів, як мені вдалося це зробити без netcat.
MountainX

Відповіді:


13

SSH ProxyCommand без сітки

ProxyCommand дуже корисний, коли хости доступні лише опосередковано. З сіткою це відносна протока вперед:

ProxyCommand ssh {gw} netcat -w 1 {host} 22

Тут {gw} і {host} є заповнювачами для шлюзу та хоста.

Але це також можливо, коли netcat не встановлений на шлюзі:

ProxyCommand ssh {gw} 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'

/ Dev / tcp - це вбудована функція стандартного bash. Файли не існують. Щоб перевірити, чи має bash цю функцію вбудованого використання:

cat < /dev/tcp/google.com/80 

... на шлюзі.

Щоб переконатися, що bash використовується, використовуйте:

ProxyCommand ssh {gw} "/bin/bash -c 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'"

І це навіть працює разом з ControlMaster.

(Оновлено 22 жовтня, щоб включати вбити, щоб очистити фонову кішку) (Оновлено 3 березня 2011 року, щоб зробити чіткішими місця та пояснити / dev / tcp)

100% кредит на Roland Schulz. Ось джерело:
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
див. Більше корисної інформації у коментарях.

Тут також більше:
http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack -4r1ubuntu /

ОНОВЛЕННЯ : ось щось нове від Марко

Посилаючись на ProxyCommand в ~ / .ssh / config, де у такої лінії є така:

ProxyCommand ssh gateway nc localhost %p

Марко каже:

Вам не потрібен netcat, якщо ви використовуєте останню версію OpenSSH. Ви можете замінити nc localhost% p на -W localhost:% p.

Результат виглядатиме так:

ProxyCommand ssh gateway -W localhost:%p

8

Великий Т, не маленький т.

-T' Disable pseudo-tty allocation.
-t' Force pseudo-tty allocation. 

Мій сценарій використовується для повернення цього повідомлення, і більше не працює.

/usr/bin/ssh -T -q -i $HOME/.ssh/one_command other_system

Я використовую в authorized_keyіншій системі, щоб викликати це для запуску команди:

from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ... 

3

Спробуйте:

ProxyCommand ssh -A -t gateway ssh -t steve@targetip

Зачекайте, чим це відрізняється від того, що я спробував?
Стів Беннетт

@SteveBennett Різниця полягає в тому, що це намагається не тільки виділити TTY на другій системі, але і на першій.
Hauke ​​Laging

це точно та сама команда, яку я згадав із результатом "кумедного, але непомітного"?
Стів Беннетт

@SteveBennett Я насправді неправильно прочитав. Моєю метою було мати -tв обох зв’язках, і я бачив це в неправильному. Я відредагував свою відповідь.
Hauke ​​Laging

Ага. Ну, все одно нічого хорошого. Спробував усі комбінації.
Стів Беннетт

-3

Ви можете спробувати наступну техніку ssh'ing на server1, а потім ssh'ing на server2.

$ ssh -t user1@server1 ssh -t user2@server2 

Робити це так, як це працює для мене.


1
Будь ласка, поясніть більше ... Що робить ця команда та як корисно вирішити відповідь.
Теяс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.