當我使用登入某些機器時SSH我希望我的別名和功能在那兒。換句話說,登入某些我希望可以使用命令快捷方式的機器。
我需要它是動態的,每次登入時我都希望更新別名。
注意:很多時候是第一次登錄,不知道那裡的機器和文件。有時是單次登入。之後需要清理,之前的配置也必須恢復。
答案1
您可以.bashrc
使用其他名稱暫時將您的檔案複製到遠端電腦。例如,使用.bashrc_temp
:
user@local$ scp .bashrc user@remote:~/.bashrc_temp
之後您可以登入遠端電腦:
user@local$ ssh user@remote
和source
文件.bashrc_temp
:
user@remote$ source ~/.bashrc_temp
現在您可以使用您的.bashrc
和您的功能了。完成工作後,您可以刪除遠端電腦上的 ~/.bashrc_temp 檔案並登出。
文件的複製和遠端電腦的登入可以透過 bash 函數來實現:
# copy the .bashrc to the remote machine
# and log into the remote machine.
# parameter $1: user@remote
function s() {
scp ~/.bashrc $1:~/.bashrc_temp
ssh $1
}
更新:
您也可以考慮將其複製.bashrc
到/tmp
遠端電腦和來源/tmp/.bashrc_temp
。
更新2:
您可以使用以下方式登入遠端計算機ssh-t。這將自動使用您的 temp .bashrc
。更新功能s()
:
function s() {
scp ~/.bashrc $1:/tmp/.bashrc_temp
ssh -t $1 "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}
答案2
我認為 sshrc 就是您正在尋找的: https://github.com/Russell91/sshrc
sshrc 的工作方式與 ssh 類似,但它也在遠端登入後取得 ~/.sshrc 。
$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome
$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'
您可以使用它來設定環境變數、定義函數以及執行登入後命令。就這麼簡單,並且不會影響伺服器上的其他用戶 - 即使他們也使用 sshrc。如需更進階的配置,請繼續閱讀。
答案3
jens-na 提供了一個很好的答案。我花了一些時間並重新設計了它,以便更好地工作。這樣,您就可以將任何參數傳遞給 SSH,例如連接埠號碼。不同的是,它使用ssh
命令來上傳.bashrc
文件,而不是scp
使用不同的命令參數名稱。
您還會注意到,它上傳了不同的文件,.bashrc_remote
以便您可以準確地選擇要在遠端伺服器上取得的內容,而不是所有內容
sshs() {
ssh $@ "cat > /tmp/.bashrc_temp" < ~/.bashrc_remote
ssh -t $@ "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}
運行如下:
sshs user@server
名稱“ sshs
”代表“SSH Source”。ssh
當您不想獲取來源時使用,sshs
當您想要獲取來源時使用。
答案4
這就是我想出來的。它允許您維護一個普通的 rc 文件,而且還可以在一個 ssh 連線中執行所有操作(即只需要登入一次,而不是先執行 scp)。
#copies some environment over to the remote machine
function ssh() {
/usr/bin/ssh -t $* "echo `base64 -i ~/bin/remote_ssh_env.sh` | base64 --decode > /tmp/remote_ssh_env.sh; bash --rcfile /tmp/remote_ssh_env.sh"
}
我不確定 rc 檔案有多大,因為它可能會在某個時候達到最大值。