ssh + sudo + su vào vỏ đăng nhập


11

Tôi có một số máy tôi thường xuyên sử dụng chỉ với mục đích sử dụng sudo suđể dành phần còn lại của phiên đăng nhập với tư cách là một người dùng có mục đích đặc biệt. Quy trình công việc chung là:

mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff

Tôi muốn đưa cái này xuống một lớp lót mà tôi có thể đặt bí danh, vì vậy tôi chỉ có thể thiết lập bí danh cho mỗi máy và đến nơi tôi cần ở trong một lệnh, mà không cần phải nhập bảng điều khiển sudo su - specialuser. Tôi có thể có thể thiết lập me@othermachineđể sudo suđăng nhập, nhưng tôi muốn giữ sự linh hoạt để hoạt động như methể tôi cần.

( Lưu ý: Tôi không có bất kỳ quyền kiểm soát nào othermachinehoặc cách thức thiết lập; đây là quy trình công việc được thiết lập mà tôi đã tham gia khi tôi được thuê.)

Suy nghĩ đầu tiên của tôi chỉ là

ssh me@othermachine "sudo su - specialuser"

và loại công việc này, nhưng nó không cho tôi kịp thời, ^Cgiết chết nó và đăng xuất tôi, và tôi cho rằng nhiều thứ khác cũng có thể sai.

Sau khi đọc lệnh Run Remote ssh với Full Đăng nhập Shell, tôi đã thử một vài thứ kỳ lạ hơn như

ssh me@othermachine 'bash -l -c "sudo su - specialuser"'

ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'

- không phải trong số đó tôi dự kiến ​​sẽ làm việc, và họ đã không làm, nhưng tôi nghĩ tôi nên thử chúng cho đầy đủ (và để tránh trùng lặp); họ đã tạo ra cùng một vỏ không có dấu nhắc (cái thứ hai có vỏ không có dấu nhắc thêm được thêm vào mesau khi exitlấy từ vỏ cho specialuser). Và tôi đã thử

ssh me@othermachine "sudo su - specialuser -c bash -l"

nhưng nó đã giúp tôi

sudo: no tty present and no askpass program specified

Ý tưởng tốt hơn?


Còn việc thêm lệnh sudo vào ~/.profilesau một thời gian trễ ngắn thì sao?
Alex

Ý tưởng là trong trường hợp kỳ lạ tôi không muốn sudotôi nên đánh ^C? Nếu tôi không thể nghĩ ra thứ gì tốt hơn tôi có thể thử nó.
David Moles

1
Bạn có thể su metừ specialuser. Hoặc trong .profilehoặc .bashrc, nếu bạn không theo dõi sudovới exit, lần đầu tiên bạn exitsẽ đưa bạn trở lại me, với một giây để kết thúc phiên. Hoặc thậm chí sử dụng một tệp cờ, do đó sudođược đi trước [ -f ~/.keep.me ] && del ~/.keep.mevà theo sau [ \! -f ~/.keep.me ] && exit: bạn chỉ cần một tập lệnh hoặc bí danh cho một lệnh menhư :>~/.keep.me; exit. Bây giờ exitsẽ kết thúc phiên của bạn và mesẽ quay trở lại phiên đăng nhập của bạn.
AFH

1
Vui lòng xem xét để viết trong phiên bản cuối cùng của bạn /bin/bashvà không đơn giản bashvì lý do bảo mật (để tránh trojan ). Đặc biệt là nếu có sudotrước ...
Hastur 7/215

Câu trả lời:


11

Dòng này sẽ làm việc cho bạn

ssh -t me@machine "sudo su - specialuser" 

Giải pháp này cho tôi một lời nhắc hay không tùy thuộc vào -tchuyển đổi

ssh -t me@machine "/bin/bash -l"   # Give me a prompt

ssh  me@machine "/bin/bash -l"     # Give me NO prompt
ssh  me@machine                    # Give me NO prompt

Ghi chú từ man ssh

-t
Buộc phân bổ giả. Điều này có thể được sử dụng để thực thi các chương trình dựa trên màn hình tùy ý trên một máy từ xa, có thể rất hữu ích, ví dụ như khi triển khai các dịch vụ menu. Nhiều tùy chọn -t buộc phân bổ tty, ngay cả khi ssh không có tty cục bộ .


Điều này hoạt động với tôi ... nó cũng có thể được thực hiện thông qua cài đặt cụ thể của máy chủ ~ / .ssh / config chứ?
hey

1
@ mọi nơi, vâng, bạn có thể làm điều đó với RequestTTY force(bằng -t) và RemoteCommand sudo su - specialuser! Tuy nhiên, lưu ý rằng các chương trình khác sử dụng SSH (như scp, rsync, v.v.) sẽ không hoạt động chính xác cho máy chủ này nữa.
Robert Riedl
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.