Tại sao SSH bị treo ở cuối các lệnh này và làm cách nào tôi có thể thoát nó?


10

Tôi chạy cái này:

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

Lưu ý: Tôi đã thử với và không có -t trong ssh.

Đầu ra gỡ lỗi từ -vvv là thế này:

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

Và sau đó quá trình chỉ ngồi đó mãi mãi. Tại sao lệnh ssh không kết thúc? Tôi đã thử với -t và không có, và tôi đã thử với lối ra và không có. Nó không tạo ra sự khác biệt :(

Cập nhật: Khi tôi nhập 'công việc' ở cuối tập lệnh, tôi thấy:

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 &

Làm cách nào tôi có thể chạy các dịch vụ này mà vẫn có phiên ssh kết thúc?

Cập nhật: Bây giờ tôi từ chối các quy trình này theo cách thủ công. Điều vẫn không thoát. Bạn đời WTF?

Cập nhật: Khi thực hiện từng dòng một, hai lệnh không trở về shell mà không nhấn CR:

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

Hãy thử sử dụng -q (chế độ im lặng) thay vì -vvv (chế độ dài dòng).
tháng chín

không có tác dụng -vvv chỉ để gỡ lỗi.
rjurney

SSH đến máy chủ và thực hiện từng lệnh một để tìm ra lý do treo.
tháng chín

1
Đó là điều - không ai trong số họ treo! Điều này hoạt động tốt trong giao diện điều khiển.
rjurney

Nó có hoạt động không nếu bạn thay thế nội dung của khối << EOI bằng một cái gì đó như "echo 1"?
biên.

Câu trả lời:


22

Thông thường, các phiên thiết bị đầu cuối SSH bị treo nếu vẫn có kết nối nền vẫn mở. Theo kết nối nền, tôi có nghĩa là những thứ như:

  • Chuyển tiếp cửa sổ X11
  • STDOUT và STDERR

Hãy xem các kết nối vẫn đang hoạt động trên phiên SSH treo của bạn bằng cách nhập ~#vào thiết bị đầu cuối SSH treo của bạn.

Có thể là kịch bản của bạn đang mở các phiên mà bạn không nhận ra. Hoặc các cấu hình đầu cuối của máy từ xa của bạn như .profile(hoặc .bashrc, v.v.) có thể có một cái gì đó trong đó thiết lập một phiên. Chúc may mắn săn bắn!

Nhân tiện, một số trình tự thoát khác được cung cấp bởi các khách hàng OpenSSH cũng có thể hữu ích:

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.)

Một điều khác, nếu bạn muốn SSH của bạn chỉ chạy các lệnh của bạn và thoát ngay lập tức - đó là, bạn không muốn một phiên thiết bị đầu cuối từ xa - bạn có thể sử dụng -ftùy chọn này ssh. Điều đó sẽ buộc kết nối SSH là một công việc nền.


3
Các kết nối sau được mở: # 0 client-session (t4 r0 i0 / 0 o0 / 0 fd 5/6 cc -1) Đây là những gì tôi nhận được. Điều này có ý nghĩa gì không?
phân tử

-flàm việc cho tôi
Jingguo Yao

Tôi nghe nói về -n cho cùng một mục đích nhưng điều đó không làm việc cho tôi!
Kostas

Có phải một quá trình nền được tính là một background connectionvà có thể một disownquá trình nền để kết nối ssh không bị treo không?
the_prole
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.