问题 Plink不会在连接时获取bashrc或bash_profile


我试图在Windows上使用plink作为ssh替代品,但我发现当plink连接到远程linux机器时,它不会提供.bash_profile或.bashrc。
我应该创建一个不同的点文件吗?或者还有其他选择吗?

例如,我的bashrc文件在我的路径中添加了一个目录。这个目录包含我想要使用的额外程序,一个是python。

这不起作用:

plink host python

这将是:

plink host "source .bashrc;python"

当我在没有命令参数的情况下使用plink时,它会输出.bash_profile并且一切正常,但看起来只需发送命令plink就不会获取任何一个文件。

有解决方法吗?


10746
2017-08-04 15:57


起源



答案:


如果您只是通过ssh或plink连接到远程主机,它将启动登录帐户的默认shell。如果该shell是bash,bash将自动获取.bash_profile。

如果通过ssh或plink连接到远程主机,要求执行命令,ssh将尝试执行该命令。

您想要实现的目标可以通过使用a来完成 ForcedCommand。另见:

将强制命令设置为执行以下两项操作的脚本:

  1. 找到.bash_profile
  2. 运行原始命令(env vars $ SSH_ORIGINAL_COMMAND或$ SSH2_ORIGINAL_COMMAND)

7
2017-08-05 09:55



我想知道为什么创建一个复制bash_profile调用的shell脚本然后运行你希望plink调用的任何命令并不容易,直到我知道这个答案“教所有plink命令如何钓鱼”,可以这么说,对吗?也就是说,如果每次运行相同的命令,则.sh路由会更容易,但需要.sh-per-command或命令批处理,这样就可以解决所有缺失的配置文件。 - ruffin


答案:


如果您只是通过ssh或plink连接到远程主机,它将启动登录帐户的默认shell。如果该shell是bash,bash将自动获取.bash_profile。

如果通过ssh或plink连接到远程主机,要求执行命令,ssh将尝试执行该命令。

您想要实现的目标可以通过使用a来完成 ForcedCommand。另见:

将强制命令设置为执行以下两项操作的脚本:

  1. 找到.bash_profile
  2. 运行原始命令(env vars $ SSH_ORIGINAL_COMMAND或$ SSH2_ORIGINAL_COMMAND)

7
2017-08-05 09:55



我想知道为什么创建一个复制bash_profile调用的shell脚本然后运行你希望plink调用的任何命令并不容易,直到我知道这个答案“教所有plink命令如何钓鱼”,可以这么说,对吗?也就是说,如果每次运行相同的命令,则.sh路由会更容易,但需要.sh-per-command或命令批处理,这样就可以解决所有缺失的配置文件。 - ruffin


接受的答案帮助我使用plink解决了同样的问题。 这里有一些细节可以帮助人们将来:

当使用plink运行单个命令的ssh连接时,不会将bash作为“交互式登录shell”调用,因此它不会运行/ etc / profile,〜/ .bash_profile,〜/ .bash_login或〜/ .profile(参见bash手册页)。

出于我的目的,我需要〜/ .profile在plink命令行中传递的命令之前运行。

可以将强制命令添加到该密钥的authorized_keys文件中(请参阅sshd手册页)。强制命令(例如运行〜/ .profile)会阻止它运行plink指定的命令,因此要使它同时执行这两项操作,强制命令应该是执行运行.profile然后执行原始plink命令的脚本。后者存储在环境变量$ SSH_ORIGINAL_COMMAND中,因此您的脚本可以执行此操作

source .profile
$SSH_ORIGINAL_COMMAND

并在键之前的〜/ .ssh / authorized_keys文件中指定脚本,如下所示:

command="source forced_command.script" ssh-rsa A3AABzaC1yc...

8
2017-07-02 12:55