Saya memiliki beberapa mesin yang saya ssh secara teratur hanya untuk tujuan menggunakan sudo su
menghabiskan sisa sesi saya login sebagai beberapa pengguna tujuan khusus. Alur kerja umum adalah:
mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff
Saya ingin merebus ini menjadi satu-liner yang saya bisa alias, jadi saya bisa mengatur alias untuk setiap mesin dan sampai ke tempat saya perlu dalam satu perintah, tanpa harus mengetikkan sudo su - specialuser
boilerplate. Saya mungkin dapat mengatur me@othermachine
untuk sudo su
masuk, tetapi saya ingin menjaga fleksibilitas untuk beroperasi seolah- me
olah saya perlu.
( Catatan: Saya tidak memiliki kendali atas othermachine
atau cara pengaturannya; ini adalah alur kerja yang telah saya buat ketika saya dipekerjakan.)
Pikiran pertamaku adalah adil
ssh me@othermachine "sudo su - specialuser"
dan ini semacam bekerja, tapi itu membuat saya tidak cepat, ^C
membunuh dan mengeluarkan saya, dan saya berasumsi berbagai hal lain mungkin salah juga.
Setelah membaca perintah Run Remote ssh dengan Full Login Shell saya mencoba beberapa hal yang lebih eksotis seperti
ssh me@othermachine 'bash -l -c "sudo su - specialuser"'
dan
ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'
- tak satu pun dari yang saya harapkan untuk bekerja, dan mereka tidak, tapi saya pikir saya harus mencobanya untuk kelengkapan (dan untuk menghindari duplikat); mereka menghasilkan shell tanpa-prompt yang sama (yang kedua dengan shell tambahan tanpa-bonus tambahan untuk me
after exit
-ing dari yang untuk specialuser
). Dan saya mencoba
ssh me@othermachine "sudo su - specialuser -c bash -l"
tapi itu hanya membuat saya
sudo: no tty present and no askpass program specified
Ide yang lebih baik?
~/.profile
setelah penundaan singkat?sudo
saya harus memukul^C
? Jika saya tidak dapat menemukan sesuatu yang lebih baik saya bisa mencobanya.su me
darispecialuser
. Atau di.profile
atau.bashrc
, jika Anda tidak mengikutisudo
denganexit
, yang pertamaexit
akan membawa Anda kembali keme
, dengan yang kedua untuk mengakhiri sesi. Atau bahkan menggunakan file flag, jadisudo
didahului oleh[ -f ~/.keep.me ] && del ~/.keep.me
dan diikuti oleh[ \! -f ~/.keep.me ] && exit
: Anda hanya perlu skrip atau alias untuk perintahme
sebagai:>~/.keep.me; exit
. Sekarangexit
akan mengakhiri sesi Anda danme
akan kembali ke sesi login Anda./bin/bash
dan bukan yang sederhanabash
untuk alasan keamanan (untuk menghindari trojan ). Terutama jika adasudo
sebelum ...Jawaban:
Baris ini seharusnya bekerja untuk Anda
Solusi ini memberi saya prompt atau tidak tergantung pada
-t
saklarCatatan dari
man ssh
sumber
RequestTTY force
(yang sama-t
) danRemoteCommand sudo su - specialuser
! Namun, perlu diketahui bahwa program lain yang menggunakan SSH (seperti scp, rsync, dll) tidak akan berfungsi dengan baik untuk host ini lagi.