8
#!/bin/bash

ssh -t $SSH "
    some
    commands
"

Откуда приходит сообщение «соединение с xx.xxx.xx.xxx закрыто»? Я не могу остановить это даже с результатом = ssh ...

4 ответа4

20

если вы добавите -o LogLevel=QUIET в командную строку SSH, это сообщение должно исчезнуть:

ssh -o LogLevel=QUIET -t $SSH "
      some 
      commands
"

Вы также можете добавить его в файл ~/.ssh/config в виде строки с надписью LogLevel QUIET

6

Это исходит от SSH. Вы видите это, потому что вы дали ключ -t , который заставляет SSH выделить псевдотерминал для соединения. Традиционно SSH отображает это сообщение, чтобы прояснить, что вы больше не взаимодействуете с оболочкой на удаленном хосте, что обычно является вопросом, когда SSH имеет выделенный псевдо-терминал.

5

Как упоминала Фрэн, это происходит из-за ключа -t. Вы можете скрыть сообщение, добавив:

 2> /dev/null

Ваш код будет выглядеть так:

#!/bin/bash

ssh -t $SSH "
    some
    commands
" 2> /dev/null

Это перенаправляет STDERR в /dev /null. Помните, что все сообщения об ошибках, которые могут появиться, также будут перенаправлены в /dev /null и поэтому будут скрыты от просмотра.

-1

Не могу прокомментировать ответ Фрэн, который является правильным.

Просто хотел добавить, что ваш фрагмент кода выглядит как скрипт, что означает, что вы, скорее всего, вызываете удаленный контент, который не зависит от интерактивного экрана (в отличие, например, от mc или top которые не имеют смысла без клавиатуры и экрана - поэтому вы будете не использовать эти программы в скриптах).

Так что вам явно лучше без терминала. Это означает, что замените флаг -t на флаг -T. Более длинный синтаксис, который я предпочитаю в скриптах, чтобы сделать их более понятными и читаемыми, будет: -o 'RequestTTY no' против -o 'RequestTTY yes' .

И в то же время забудьте про решение -o LogLevel=QUIET предложенное Лео - оно также скрывает сообщения об ошибках. Если ваш сценарий сталкивается с какими-то неблагоприятными обстоятельствами, вы не поймете, что пошло не так. В сценариях вы, вероятно, захотите использовать -o LogLevel=ERROR - это подавляет баннер удаленного компьютера, если он есть, но пропускает сообщения об ошибках.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .