当我使用ssh登录到某些计算机时,希望我的别名和功能在那里。换句话说,登录到我希望可以使用命令快捷方式的计算机。
我需要动态的,每次登录时都希望更新别名。
注意:很多时候是第一次登录,却不知道那里的机器和文件。有时它是单次登录。该机器只需一次登录。之后需要清除它,以前的配置也必须还原。
当我使用ssh登录到某些计算机时,希望我的别名和功能在那里。换句话说,登录到我希望可以使用命令快捷方式的计算机。
我需要动态的,每次登录时都希望更新别名。
注意:很多时候是第一次登录,却不知道那里的机器和文件。有时它是单次登录。该机器只需一次登录。之后需要清除它,以前的配置也必须还原。
Answers:
您可以.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"
}
/tmp/
。任何其他用户都可以利用此漏洞以登录用户身份运行任何代码。这mktemp
应用于确保临时文件具有唯一名称。
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
当你这样做。
Pseudo-terminal will not be allocated because stdin is not a terminal
我认为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。有关更高级的配置,请继续阅读。
vim $(which sshrc)
即可看到bash文件。您可以在每行之后添加echo命令,以查看其挂起位置。
不确定局限性,但是我能够使它与类似的东西一起工作:
function ssh_with_rc() {
RC_DATA=`cat ${HOME}/.bashrc | base64 -w 0`
ssh -t $@ "echo \"${RC_DATA}\" | base64 --decode > /tmp/${USER}_bashrc; bash --rcfile /tmp/${USER}_bashrc; rm /tmp/${USER}_bashrc"
}
alias ssh="ssh_with_rc"
RC_DATA
变量的方法。
这就是我想出的。它允许您维护一个普通的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文件可以有多大,因为它有时可能会最大。
我认为https://github.com/fsquillace/pearl-ssh可以满足您的需求。
我很久以前在sshrc诞生之前就写了它,与sshrc相比,它具有更多的优势:
例如:
$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
我当时想解决像您这样的问题,并且意识到我真正想要的是sshfs。也许您也可以使用它?
我的问题是在ssh'ing时,我希望在远程工作时保持自己的颜色,别名,函数和脚本。