SSH等效于.profile / .bashrc


14

我正在寻找一种在ssh到的任何服务器上的会话中自动定义一些别名的方法。我无法将它们.bashrc放在服务器上的文件中,因为我登录时使用的用户帐户是由其他人共享的,此外还有许多用户帐户,并且在每台计算机上维护脚本会很麻烦。我知道我可以用来expect自动键入别名,但是我只是想知道OpenSSH是否有内置的东西可以用来实现此目的?

Answers:


7

期望中这样做没有错。我做过的另一种方法也很脏,使用脚本,先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"

我喜欢这个,因为它不需要服务器上的任何特殊配置,太好了!
拉蒙

4

您可以放入配置,.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'

(未经测试,但应该这样做)


如何实现在OP登录到的任何服务器上自动进行设置的目标?
womble

它不是。它解决了问题的“我登录时使用的用户帐户已被其他人共享”的部分
krissi 2012年

这几乎完全是我的工作,但有一个区别-我不是从外部接受该环境变量,而是在SSH密钥本身中进行设置。这意味着.ssh / authorized_keys包含以environment =“ IAMTHEGREATEST = forsure” ssh-dss开头的行...
Bron Gondwana

3

ssh(1)手册页中,如果创建文件〜/ .ssh / rc,则将在执行用户的登录Shell之前执行该文件,从而使用户有机会在登录之前执行“预设置”任务。 。给出的示例是在登录之前挂载网络共享。

如果您不想使用单个〜/ .ssh / rc文件,则可以使用/ etc / ssh / sshrc进行相同操作。快速检查您的特定用户名或某些识别方法的测试可能会限制其他人甚至没有意识到这一点。

/ etc / ssh / sshrc仅在不存在〜/ .ssh / rc 时才提供,因此您可以有效地实现两层复杂性。


叮叮叮-我们有赢家!
暂停,直到另行通知。

错过了那一个!尽管看上去很吸引人,但这仍然需要分别设置每个服务器,因为它在服务器端正确吗?
拉蒙2012年

是的,服务器端,但是您只需要将一个文件压缩一次。并不是真正简单的方法来发送登录后立即处理的命令流。{笑}尽管给我一点,也许写点东西... {今天不行!}
lornix

2

别名由外壳定义和解释。

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

您可以ssh在客户端编写一个包装程序,以在远程端建立一个不错的环境,但这并不是很漂亮。


0

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


0

一种可能的解决方案是将您的脚本放置在所有其他服务器都可以访问的Web服务器上。

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

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

这样,您只需要在一个地方进行更新即可。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.