Linux
ssh 到伺服器並自動執行 sudo 命令並保持外殼打開
我想
alias
在我的本地機器上使用儲存在我本地機器上的密碼ssh
執行目標系統,sudo
但在遠端系統上保持外殼打開。原因是我很懶,每次登錄伺服器時都不想輸入很長的密碼。我知道這不是最安全的做法。現在,如果我執行以下操作,它可以工作:
ssh -q -t $1 "echo $mypword|base64 -d|sudo -S ls; bash -l"
$1
是遠端系統的主機名。mypword 是儲存在本地系統上的編碼密碼。這有效並讓我的外殼打開。然後我可以用 sudo 做任何事情,因為它現在已經為那個 shell 記憶體了。我遇到的問題是,如果您為我的帳戶執行 ps 和 grep,您將在程序列表中看到包含密碼的編碼字元串。不能這樣。有沒有辦法在程序列表中不顯示密碼的情況下完成此操作?
我試過了:
echo $mypword|ssh -q -t $1 "base64 -d|sudo -S ls -l /root;bash -l"
ls
熄滅,但外殼不保持打開狀態。
通常這可以用
expect
. 您可以獲取它以從環境中檢索密碼,將其傳遞給base64
並恢復輸出。然後生成 ssh,等待$
shell 的提示,然後向它發送sudo
命令。當看到來自 sudo 的密碼提示時,發送解碼後的密碼,然後用interact
. 將以下內容放入文件中並使其可執行,然後使用您的主機名作為參數呼叫它。#!/usr/bin/expect -f # https://unix.stackexchange.com/a/422651/119298 log_user 0 spawn base64 -d send $env(mypword)\n\x04 expect -nobrace -re "\n(.+)$" close set output $expect_out(1,string) spawn ssh -q -t [lindex $argv 0] expect {$ } send "sudo echo hi\n" expect -nobrace -re {.sudo. password.*:} send "$output\n" expect "\n" interact