windows - Plink 在连接时不提供 bashrc 或 bash_profile

标签 windows linux ssh plink

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

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

这行不通:

plink host python

哪里会这样:

plink host "source .bashrc;python"

当我使用不带命令参数的 plink 时,它会获取 .bash_profile 并且一切正常,但看起来仅通过发送命令 plink 不会获取任何一个文件。

有解决办法吗?

最佳答案

接受的答案帮助我使用 plink 解决了同样的问题。 下面是一些可能对 future 的人有所帮助的细节:

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

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

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

source .profile
$SSH_ORIGINAL_COMMAND

然后您在 ~/.ssh/authorized_keys 文件中指定脚本,如下所示,在同一行的 key 之前:

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

关于windows - Plink 在连接时不提供 bashrc 或 bash_profile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3407386/

相关文章:

php - PHP Curl从aws返回404,但可以在其他主机甚至我的机器上运行

windows - 尝试提交 Git 文件但得到::fatal: LF 将被 <some file in repo> 中的 CRLF 替换

windows - 如何在以.bat文件编写的powershell命令中读取变量

c - 拨号连接端口

c - 从套接字读取时出现问题

linux - 使用字符串的 sed 变量替换

ubuntu - 使用 pem 文件访问 AWS ssh 集群

linux - 无法从 Jenkins 访问 git repo

c++ - 在带有 CLion 的 Windows 中使用 CMake (mingw) 在 C++ 中未定义的 Qt5 引用

xml - 用于格式化 XML 文件并保留空行和注释的 CLI 工具