动态地将本地 shell 别名加载到 ssh 会话中

动态地将本地 shell 别名加载到 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命令。这将自动使用您的临时文件.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 源”。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 文件可以有多大,因为它可能在某个时候达到最大值。

相关内容