動態載入本機 shell 別名到 ssh 會話

動態載入本機 shell 別名到 ssh 會話

當我使用登入某些機器時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當您想要獲取來源時使用。

https://gist.github.com/jonahbron/5549848

答案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 檔案有多大,因為它可能會在某個時候達到最大值。

相關內容