SSH 等效于 .profile/.bashrc

SSH 等效于 .profile/.bashrc

我正在寻找一种方法,可以在任何我 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

如果可能的话,我会存储一个小脚本,该脚本初始化/定义您想要的所有内容,这些内容可从任何地方访问,并在每台服务器登录后执行它。

相关内容