SSH等同于.profile / .bashrc

我正在寻找一种方法来自动定义我的会话中的任何服务器我ssh到的一些别名。 我不能把它们放在服务器上的.bashrc文件中,因为我login的用户帐户被其他人共享,除此之外还有几十个,在每台机器上维护一个脚本将是痛苦的。 我知道我可以使用expect自动input别名,但我只是想知道OpenSSH是否有内置的,可以用来实现这个?

期待这样做没有任何问题。 我做的另一种方式也很肮脏,用脚本,首先scp你想运行的configuration文件,然后ssh,运行它,保持连接。

因此,将所有configuration文件设置放在本地文件.<local username>-<hostname>-init.sh ,然后运行以下脚本以login到远程主机。

 #!/bin/sh [ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; } host=$1 ; shift # use any remaining args as ssh options initfile=".$USER-`hostname`-init.sh" scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile" ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile" 

你可以把你的configuration放在.bashrc ,只有在login时才让它们执行。为了使这个成为可能,你可以通过ssh传递一个环境variables。

.bashrc修改

 # common stuff if [ -n "$IAMTHEGREATEST" ]; then # my personal cool stuff fi; # other global stuff 

sshd_config修改:

 AcceptEnv ... IAMTHEGREATEST 

.ssh/config修改(客户端):

 Host ... SendEnv IAMTHEGREATEST 

.bashrc修改(客户端):

 alias ssh='IAMTHEGREATEST="forsure" ssh' 

(未经testing,但应该这样做)

ssh(1)手册页,如果你创build了一个文件〜/ .ssh / rc ,它将在用户的loginshell被执行之前执行,从而在login之前有机会做“预先设置”任务。给出的例子是在login之前安装networking共享。

如果你不想使用单独的〜/ .ssh / rc文件,你可以使用/ etc / ssh / sshrc 。 检查您的特定用户名或一些识别方法的快速testing可能会限制其他人甚至不知道这是到位的。

如果〜/ .ssh / rc不存在,那么/ etc / ssh / sshrc是唯一的来源,所以你可以有效地实现两层的复杂性。

别名是由shell定义和解释的。

不幸的是, ssh没有办法将它们传递给远程shell。

你可以在客户端编写一个ssh包装器,在远程端设置一个很好的环境,但是它不会很漂亮。

如果可能的话,我将存储一个小脚本,用于在任何地方都可以访问的服务器上初始化/定义所需的所有内容,并在每个服务器上login后执行它。

一个可能的解决scheme是把你的脚本放在一个所有其他服务器可以访问的web服务器上。

然后,每个服务器应该只需要一个小脚本来执行如下操作:

 wget http://myserver.com/myawesomescript.sh chmod +x myawesomescript.sh ./myawesomescript.sh 

这样你只需要在一个地方更新它。