Làm thế nào để sử dụng ssh và sudo với nhau trong bash?


10

Tôi đã không thể tìm thấy một câu hỏi mô tả kịch bản cụ thể này.

Tôi đang cố gắng thực thi một tập lệnh bash rất cơ bản để lấy lại đăng nhập từ nhiều máy. Tôi đang chạy tập lệnh cục bộ nhưng cần truy cập vào một máy bên ngoài thông qua ssh, cũng như sudo vào một người dùng đặc quyền một lần trên máy đó ...

ssh myuser@machine.net
sudo su  - privledged_user
cat logs > file.txt

Chạy cái này với sh -x cho thấy bash đang bị kẹt trên dòng 'ssh'. Vì vậy, tôi đã cố gắng sửa đổi nó thành này:

ssh myuser@machine.net sudo su - privledged_user cat logs > file.txt

Điều này dường như cũng bị đình trệ vô thời hạn. Có một giải pháp tốt hơn cho vấn đề này ?? Tôi không thấy cách sử dụng sudo su từ những gì tôi có thể nói ...

Cảm ơn vì bất kì sự giúp đỡ!


Tại sao bỏ phiếu chặt chẽ? Câu hỏi này thuộc chủ đề: quản lý phần cứng hoặc phần mềm của máy chủ, máy trạm, lưu trữ hoặc mạng, các công cụ được sử dụng để quản trị, giám sát hoặc tự động hóa những thứ này
jlliagre 30/12/14

Câu trả lời:


5

Cách tôi đạt được điều này trong môi trường hiện tại của tôi, là chạy ssh với -tcờ buộc phân bổ tty, và sau đó chạy sudo -u root trong đó, như sau:

ssh -t hostname << EOF
  command1
  sudo -u root command2
  sudo -u otheruser "command3 | command4"
  sudo -u root /bin/bash -c "command5; command6; command7"
  command8 && ( sudo -u otheruser /bin/bash -c "cmd1 ${1}; cmd2 {$2}" ) || echo cmd2 did not work

EOF

Tôi có tài khoản của tôi trong sudoers ở phía xa để không cần mật khẩu.

Ví dụ này cho bạn thấy các cách khác nhau để thực hiện việc này trong một phiên ssh duy nhất, bao gồm chạy nhiều lệnh bằng bash hoặc trong một khung con. Cũng lưu ý rằng nếu bạn đặt đoạn mã trên vào một tập lệnh thực thi, bạn có thể chuyển các đối số dòng lệnh ($ 1 và $ 2) cho ssh và chúng sẽ được mở rộng và sau đó được tham chiếu ở phía xa.


Thật không may vì tôi không quản lý máy chủ từ xa, tôi tin rằng tôi bị kẹt khi sử dụng sudo su ở đây. Điều đó vẫn sẽ làm việc trong định dạng này?
Matt124234

vâng nó cũng sẽ làm việc bạn có thể nhập mật khẩu khi được nhắc.
Michael Martinez

Tôi đã thử: ssh -t mrhyner@stg-app3.indeed.net << EOF sudo su - adcentrl egrep 'ERROR \ | WARN' / home / adcentrl / cronjobs / log / * / * EOF Nhưng tôi đã nhận được: "Pseudo -terminal sẽ không được phân bổ vì stdin không phải là thiết bị đầu cuối. "
Matt124234

hoàn toàn ổn bỏ qua cảnh báo đó và tiến hành. nếu bạn muốn, bạn có thể tắt "RequireTty" trong / etc / sudoers ở đầu xa
Michael Martinez

5

Nếu bạn không muốn hoặc không thể ngừng sudo hỏi bạn mật khẩu, một mẹo đơn giản là đọc nó cục bộ và lưu trữ nó trong một biến cục bộ:

read -p 'Password: ' -s password

ssh -t user@1.2.3.4 <<EOF
  echo "$password" | sudo -S whoami
EOF

1

Nếu sudo được cấu hình để cho phép các lệnh không mật khẩu, điều này sẽ làm những gì bạn muốn:

ssh myuser@machine.net "sudo su - privileged_user -c 'cat logs'" > file.txt

hoặc là

ssh myuser@machine.net "sudo su - privileged_user -c 'cat logs > file.txt'"

tùy thuộc vào việc bạn muốn file.txttập tin được tạo cục bộ hay từ xa.

Mặt khác, đây là một cách để chuyển mật khẩu của người dùng từ xa tới sudo:

echo mrhyner_password | \
  ssh mrhyner@test-server.net \
  "sudo -S su - adcentrl -c 'egrep ERROR\|WARN /home/adcentrl/cronjobs/logs/*/*'"

Rất thú vị. Tuy nhiên, sử dụng ssh mà không -t cho tôi biết "không có tty hiện tại". Thêm vào -t sẽ loại bỏ lỗi này nhưng dường như không tôn trọng 'sudo su' vì nó nhắc tôi nhập mật khẩu. Đây là những gì tôi đang làm: ssh -t mrhyner@test-server.net "sudo su - adcentrl -c egrep" ERROR \ | WARN "/ home / adcentrl / cronjobs / log / * / *" Điều này mang lại cho tôi: bash : WARN: không tìm thấy mật khẩu [sudo] cho mrhyner:
Matt124234

Xin lỗi, tôi dường như không biết cách định dạng nhận xét của mình trong vấn đề này
Matt124234

Tôi đã giả sử sudo được cấu hình là không mật khẩu cho tài khoản từ xa của bạn.
jlliagre

và bạn đang thiếu dấu ngoặc đơn.
jlliagre

Đó là, điều đó khiến tôi có lý do rằng bash không tôn trọng lệnh ssh vì một số lý do. Nó hoạt động giống như tôi đang cố gắng sudo từ máy chủ lưu trữ cục bộ của mình = \
Matt124234
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.