Чому SSH висить у кінці цих команд і як я можу зробити його вихід?


10

Я запускаю це:

ssh -t -vvv -i ~/.ssh/druid-keypair -o StrictHostKeyChecking=no ubuntu@${INSTANCE_ADDRESS} <<EOI

# Setup Oracle Java
...

# Install dependencies - mysql must be built from source, as the 12.04 apt-get hangs
export DEBIAN_FRONTEND=noninteractive
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password diurd'
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password diurd'
sudo apt-get -q -y -V --force-yes --reinstall install mysql-server-5.5

echo "ALL DONE with druid environment setup!"
exit
EOI

Примітка: я спробував з і без -t в ssh.

Вихід налагодження з -vvv такий:

...
ldconfig deferred processing now taking place
ALL DONE with druid environment setup!
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0

І тоді процес просто сидить там назавжди. Чому команда ssh не закінчиться? Я спробував з -t і без, і я спробував з виходом і без. Це не має значення :(

Оновлення: Коли я ввожу "завдання" в кінці сценарію, я бачу:

JOBS:
[1]-  Running                 nohup bin/zookeeper-server-start.sh config/zookeeper.properties 2>&1 > /dev/null &
[2]+  Running                 nohup bin/kafka-server-start.sh config/server.properties 2>&1 > /dev/null &

Як я можу запустити ці служби та все-таки закінчити сеанс ssh?

Оновлення. Зараз я вручну відхилив ці процеси. Справа все ще не виходить. WTF товариш?

Оновлення: під час виконання рядка за рядком дві команди не повертаються до оболонки, не потрапляючи на CR:

nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &

Спробуйте використовувати -q (тихий режим) замість -vvv (багатослівний режим).
вересень

ніякого ефекту. -vvv був просто для налагодження.
rjurney

SSH на сервер і виконувати всі ці команди по черзі, щоб з'ясувати причину вивішування.
вересень

1
У цьому річ - жоден з них не висить! Це добре працює в консолі.
rjurney

Чи працює, якщо ви заміните вміст блоку << EOI чимось на кшталт "ехо 1"?
ред.

Відповіді:


22

Зазвичай сеанси SSH-терміналів висіють, якщо ще є фонові з'єднання. Під фоновими зв’язками я маю на увазі такі речі, як:

  • Переадресація вікна X11
  • STDOUT та STDERR

Подивіться на підключення, які все ще активні на підвішеному сеансі SSH, ввівши ~#свій підвісний термінал SSH

Можливо, ваш сценарій відкриває сесії, які ви не усвідомлювали. Або в конфігураціях терміналу віддаленої машини на кшталт .profile(або .bashrcтощо) може бути щось, що встановлює сеанс. Удачі полювання!

До речі, деякі інші послідовності евакуації, запропоновані клієнтами OpenSSH, також можуть бути корисними:

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Ще одне, якщо ви хочете, щоб ваш SSH просто запускав ваші команди і негайно виходив - тобто ви не хочете сеансу віддаленого терміналу - ви можете використовувати цю -fопцію для ssh. Це змусить з'єднання SSH стати фоновим завданням.


3
Наступні з'єднання відкриті: # 0 клієнт-сеанс (t4 r0 i0 / 0 o0 / 0 fd 5/6 cc -1) Це те, що я отримую. Це щось означає?
moleculezz

-fпрацює для мене.
Jingguo Yao

Я чув про -n з тією ж метою, але це не працювало для мене!
Костас

Чи вважається фоновий процес а, background connectionі чи можна disownфоновим процесом, щоб ssh-з'єднання не зависло?
the_prole
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.