如何仅为特定程序启用无密码 ssh [关闭]
Posted
技术标签:
【中文标题】如何仅为特定程序启用无密码 ssh [关闭]【英文标题】:how to enable passwordless ssh for a particular program only [closed] 【发布时间】:2012-12-28 04:43:31 【问题描述】:我有一个要求,我希望我的 C++ 程序的用户能够在特定机器上执行无密码“ssh”,但同一用户不应该能够通过普通终端/shell 在同一台机器上执行 ssh .
【问题讨论】:
您的意思是要将密码编译到程序中吗? 不,我需要一些可以嵌入到我的程序中的通用方法,以便一般不允许 ssh 但我的程序可以执行 ssh。 SSH 被设计为安全的,这意味着某些秘密(密码、私钥)必须存在并且必须得到安全管理。你想把事情颠倒过来,基本上使安全无效。这没有任何意义,因此您的问题没有答案(尤其是在您拒绝 dan3 的答案后,这是您的情况中的 only 解决方案)。 我想要什么,当用户运行我的程序时,我会在内部运行一些脚本,该脚本可以进行 ssh 设置,以便程序能够在该远程计算机上执行无密码 ssh,但不必要的用户无法登录到远程机器,这样他就无法在该机器上启动一些未经授权的程序。现在在整个流程中,我在哪里使 ssh 的基本安全功能失效? 整个想法是有缺陷的——计算机系统上的应用程序不能(技术上)拥有比拥有计算机系统的个人更多的权利。您可能会发现使用一些自定义协议而不是 SSH 是一个更好的主意。 【参考方案1】:使用在不同 UID 下执行的代理程序(允许 ssh 到您的远程主机),并将来自您的真实程序的任何请求转发到代理。
【讨论】:
不,这不是一个选项,因为我需要通过我的程序仅通过该用户的 id 对远程计算机执行 ssh 操作 如果这是[您的旧问题](***.com/questions/10859863) 的后续行动,您可能需要考虑使用替代 IPC 机制; (例如,在 host1 上打开网络套接字并将特殊令牌从 host2 发送到该端口这样简单)【参考方案2】:Match User stack
ForceCommand exectute_me.sh
假设您的用户名是stack
。在这种情况下,将上面的行放在sshd_config
中。
所以如果这个用户 (stack
) 尝试通过ssh
登录服务器,则名为execute_me.sh
的脚本将被执行。
如果你能在execute_me.sh
中为这个用户写一些特定的条件,我想你可以对这个用户做你想做的事。
【讨论】:
【参考方案3】:在您的程序中硬编码 SSH 密码(可能有点混淆,尽管这并没有多大帮助)。
或者,使用带有密码短语的SSH key,并在程序中硬编码密钥的密码短语(与 Unix 密码不同)(这让您有更多的控制权)。
您确定不能忍受用户在每次会话开始时(例如早上)输入一次 SSH 密钥密码吗?每个进一步的 ssh 请求都不需要密码。
【讨论】:
释义不能硬编码,因为我的程序可以有任意数量的随机用户。 然后将用户的密码或密码短语存储在一个文件中。这是进一步的安全漏洞,但这就是你得到的 不,我需要用最少的用户输入来做每件事,如果用户在输入释义后会做 ssh,那么他也可以在我的程序之外独立做,这是我不想要的。以上是关于如何仅为特定程序启用无密码 ssh [关闭]的主要内容,如果未能解决你的问题,请参考以下文章