Tránh kết nối được chia sẻ với <host> tin nhắn đã đóng


11

Tôi đang quản lý rất nhiều trang web drupal và cố gắng tự động hóa một số nội dung bằng cách sử dụng drush. Drush chạy các cuộc gọi drush cục bộ trên máy chủ từ xa thông qua ssh bằng các tùy chọn được chỉ định trong cấu hình cho bí danh trang web. Tôi đang thực hiện khá nhiều cuộc gọi này, vì vậy để tăng tốc độ, tôi sử dụng các kết nối ssh liên tục với ssh config như vậy:

Host *
  # see http://www.revsys.com/writings/quicktips/ssh-faster-connections.html
  ControlMaster auto
  ControlPath ~/tmp/%r@%h:%p
  ControlPersist 3600

Tôi tăng tốc, nhưng tôi cũng nhận được tin nhắn như vậy:

$ drush @alias drupal-directory webform 

/var/local/www/example.com/htdocs/sites/all/modules/contrib/webform
Shared connection to 12.34.56.78 closed.

Thông báo về kết nối được chia sẻ là trên thiết bị xuất chuẩn, cùng với đầu ra mà tôi muốn (nghiêm túc? Tại sao không phải là stderr?), Vì vậy nó gây ra vấn đề khi tôi cố gắng nắm bắt đầu ra trong các tập lệnh của mình:

directory=$(drush @$alias drupal-directory $module)

Tôi hy vọng kết nối chính là kết nối tôi đã mở và nó không giống như kết nối. Vì vậy, có lẽ drush rõ ràng làm cho kết nối mới này thành một kết nối chính và đóng nó? Trong mọi trường hợp, có cách nào để chặn thông báo về việc đóng kết nối không?

[Vấn đề này là trong một bối cảnh drupal / drush, nhưng tôi nghĩ rằng về cơ bản là về ssh. Đây có phải là trang web phù hợp không?]

BIÊN TẬP:

Có vẻ như vấn đề là cụ thể nơi -tsử dụng tùy chọn ssh. Tôi đang sử dụng điều này bởi vì mật khẩu svn cần phải được nhập tại nhiều điểm khác nhau và không có -tmật khẩu nhắc nhở sẽ không được hiển thị. Có lẽ có một cách khác để ngăn chặn những lời nhắc nhở bị mất?


1
1) Có, có vẻ như bạn đang ở đúng nơi. 2) một hack xấu xí như thế directory=$(drush @$alias drupal-directory $module | grep -v "Shared connection to")là đủ?
terdon

Đó là những gì tôi đang làm hiện tại. Chỉ có điều nó còn khó khăn hơn thế với các nguồn cấp dữ liệu và công cụ xử lý tốt, và nó ở rất nhiều nơi, vì vậy tôi thực sự hy vọng có một cách nào đó để khiến ssh im lặng về nó.
mc0e

"Kết nối được chia sẻ tới 12.34.56.78 đã đóng." đầu ra tin nhắn thực sự là trên thiết bị xuất chuẩn, không phải thiết bị xuất chuẩn.
Dereckson

@Dereckson - trừ khi có người sửa nó.
mc0e

Câu trả lời:


9

Điều kiện của tin nhắn

Theo phần này của mã nguồn di động OpenSSH , cần có hai điều kiện để in thông báo này:

  • phân bổ giả được kích hoạt (-t), như bạn đã nhận thấy
  • cấp độ nhật ký phải khác với QUIET

Giải pháp để chặn tin nhắn

  • Thêm vào dòng lệnh -o LogLevel=QUIETcủa bạn ssh.
  • Chỉnh sửa ~ / .ssh / config và thêm vào LogLevel QUIETdưới các Hostkhối có liên quan .

Ví dụ: tôi sử dụng dòng này trong tập lệnh sh kết nối với một số máy chủ để chạy các lệnh Docker, một số có khả năng tương tác:

SSH = "ssh -t -o LogLevel=QUIET"

Cảnh báo: mọi lỗi đều bị loại bỏ

Một nhược điểm của phương pháp này là điều này cũng giúp loại bỏ các lỗi nghiêm trọng của SSH.

$ ssh -t -o LogLevel=QUIET notexisting.notld ssh anotherone.notld
$

Thay thế: đăng nhập đầu ra stderr thay vì in nó

Nếu stderr vẫn được coi là quan trọng để có được, thì một cách khác là chuyển hướng stderr sang syslog thay vào đó, ssh -t -ynhưng (sau đó bạn sẽ làm ngập nhật ký của bạn với tất cả các Shared connection to <host> closedtin nhắn đó).


2
Theo nguồn tin đó, tin nhắn được gửi tới stderr - có lẽ đó là một sự thay đổi so với phiên bản mà người hỏi sử dụng? Nếu vậy, có lẽ đáng xem xét nâng cấp.
Toby Speight

Tôi thực sự không muốn kết nối được chia sẻ trên mạng với <host> đã đóng các tin nhắn, nhưng nói chung tôi muốn xem các thông báo lỗi trên thiết bị lỗi chuẩn. Vấn đề không nằm ở ssh, mà là do drush khi hoạt động từ xa. Stderr của lệnh drushr từ xa đang cuộn lên trên stdout của lệnh drush cục bộ.
mc0e

-o LogLevel=QUIETlà một thực hành tiêu chuẩn trong tự động hóa các công cụ từ xa.
Dereckson
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.