我正在寻找一种方法,可以在任何我 ssh 连接的服务器上的会话中自动定义一些别名。我无法将它们放在.bashrc
服务器上的文件中,因为我登录的用户帐户是由其他人共享的,而且有几十个,在每台机器上维护一个脚本会很麻烦。我知道我可以使用expect
自动输入别名,但我只是想知道 OpenSSH 是否有任何内置功能可以实现这一点?
答案1
在 expect 中执行此操作没有任何问题。我执行的另一种方法也相当肮脏,使用脚本,首先 scp 您要运行的配置文件,然后 ssh 登录,运行它并保持连接。
因此,将所有配置文件设置放在本地文件中.<local username>-<hostname>-init.sh
,并运行以下脚本登录到远程主机。
#!/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"
答案2
您可以输入您的配置.bashrc
并仅在您登录时才允许它们执行。为了实现这一点,您可以通过 ssh 传递环境变量。
.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'
(未经测试,但应该可以)
答案3
来自SSH(1)手册页,如果你创建一个文件〜/.ssh / rc,它将在用户的登录 shell 执行之前执行,从而有机会在登录之前执行“预设置”任务......给出的例子是在登录之前挂载网络共享。
如果你不想使用单独的〜/.ssh / rc文件,你可以用/etc/ssh/sshrc。快速测试一下您的特定用户名或某种识别方法,可能会限制其他人注意到这一点。
/etc/ssh/sshrc仅当〜/.ssh / rc不存在,因此可以有效地实现两层复杂性。
答案4
如果可能的话,我会存储一个小脚本,该脚本初始化/定义您想要的所有内容,这些内容可从任何地方访问,并在每台服务器登录后执行它。