SSH в SSH перестал работать с “stdin: не tty”

#!/bin/bash

 while read -r line; do 
   awk -F '^"|","|"$' '$0 ~ line{print $2}' line="$line" data.csv
 done < list.txt

Подтверждение концепции

$ while read -r line; do awk -F '^"|","|"$' '$0 ~ line{print $2}' line="$line" data.csv; done < list.txt
The Mike
John
Johnny
Lizard
Johnny

Этот разделитель полей имеет дело со встроенными кавычками и/или запятыми

60
19.09.2012, 03:42
5 ответов

По умолчанию при выполнении команды на удаленной машине с помощью 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 содержала бы создание данных или - использующий команду, как:

ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
71
27.01.2020, 19:32

Это ожидает интерактивный терминал на tty устройстве на промежуточном сервере.

При попытке этой команды она должна работать:

ssh user@computer1 -t "ssh otheruser@computer2"

Посмотрите man ssh для -t опция.

7
27.01.2020, 19:32

Существует лучший способ использовать 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. Любая из этих нескольких доступных версий сделает.

9
27.01.2020, 19:32
  • 1
    Разве мы Не требуются добавить связанную строку "прокси" в 'authorized_keys' на computerone? Я продолжаю означать изучать питание 'прокси' openSSH, но просто еще не нашел время для него. –  Felipe Alvarez 26.06.2014, 08:07

Я решил эту проблему, добавив RequestTTY Yes в мой файл конфигурации ssh, расположенный по адресу ~/.ssh/config, следующим образом...

Host myserver.com
  User my-ssh-username
  RequestTTY Yes
2
27.01.2020, 19:32

Вы можете переопределить параметр конфигурации 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.

0
27.01.2020, 19:32

Теги

Похожие вопросы