0

我正在使用libssh连接到远程机器并执行命令。

连接工作正常,但问题是:在远程机器上,我连接时正在运行的 bash 是 rbash。当我发送ps | grep ungreppable_phrase到另一台机器上执行时,输出如下:

root 25989 25987 0 07:47 ? 00:00:00 rbash -c ps -ef | grep ungreppable_phrase

(我从该列表中删除了 grep 命令)

所以,很明显,rbash是远程shell。

现在,rbash 手册页告诉我们在应用任何 rbash 限制之前读取启动文件。因此,如果我的任何启动文件(/etc/profile、~/.bash_profile;~/.bash_user 或 ~/.profile)包含 的定义PATH,则在我运行命令时该定义应该可见。特别是,如果其中一个目录中有一些可执行文件PATH,我应该能够运行它。

这是我的 .profile 文件中的一行:

PATH=/home/my_user/bin

不知何故,我设法ls在那里运行。它确实包含可执行文件。

我的 ~/.profile 是要获取的最后一个文件,它不包含任何其他文件的来源。也没有对PATH.

但是我得到一个“找不到命令”错误(或者看起来很像的东西,回声 $? 返回 127)。

有人能告诉我为什么我的 .profile 文件在我远程登录时似乎没有来源吗?是因为 libssh 中的一些代码吗?我正在尝试探索它以查找是否有一些特殊的选项传递给 rbash,而我在上面的 grep 中看不到这些选项。

(由于我们处于 rbash 模式,我不能简单地要求更改 PATH)

非常感谢,帕斯卡

4

2 回答 2

1

啊,终于发现哪里不对了。

经过一番调查,似乎当我通过ssh {username}@{host}(通过libssh API)登录机器时,whoami不会回复username,而是回复root(是的,root。0:0,allmight,以及一切。超级用户) .

我检查了 /etc/passwd 文件,最令我惊讶的是,用户名也有 0:0 的用户 ID。

在我的环境中根源 bash(而 {username} 将使用 rbash)。因此发现了上面的问题。

现在,当“name1”和“name2”是别名时,为什么 ssh 切换到“name1”,而您ssh name2@host通过 libssh 运行仍然是晦涩难懂的。但至少,我知道为什么我上面的连接不起作用。

于 2013-06-11T15:18:56.120 回答
0

您链接的手册页表明这是常规 bash,然后它会受到限制。那么,您的 bash 是如何开始的呢?bash 的启动方式告诉它要读取哪些文件。另请注意,当它搜索时,~/.profile只有在您没有~/.bash_profile文件时才会使用它。如果 bash 作为交互式登录 shell 运行,它只会查找这些文件。

在页面的更下方,您可以看到它读取~/.bashrcssh 启动的 shell 的位置。总而言之,最可能的解释是,如果您没有~/.bashrc文件或者它没有提供您的~/.profile.

于 2013-06-11T13:32:41.390 回答