C语言 如何从makefile或system()调用输入密码?

m1m5dgzv  于 2023-01-29  发布在  其他
关注(0)|答案(2)|浏览(154)

我正在做一个C项目,它可以连接到远程服务器。通常,这涉及到使用我添加到makefile中的一些小的终端宏来scp一个可执行文件到远程服务器。虽然方便,但唯一我还不能简化的部分是我需要输入密码的部分。
另外,在我的代码中,我已经使用system()调用来完成一些小的终端命令(如sort)。如果需要的话,我也希望能够在这里输入密码。例如,如果我想在代码中构建一个字符串来将本地文件scp到我的远程服务器,那么让我的代码从某个地方拉(并使用)一个密码以便它能够实际访问该服务器就非常好了。
有没有人对Make更有经验,知道如何在C语言中将密码构建到makefile和/或system()调用中?如果我能在没有任何第三方软件/库的情况下做到这一点,那就加分了。我正试图尽可能地保持它的独立性。
编辑:在阅读响应时,看起来最好的策略是与服务器建立一个预先存在的ssh密钥关系,以避免通过更安全的方式登录过程。前面的工作更多,将来的工作更少,听起来,有额外的安全性。
谢谢你们的建议。

i2loujxw

i2loujxw1#

解决方案是 * 不 * 使用密码。SSH,因此SCP,在许多其他认证中,有公钥认证,这在互联网上到处都有描述。使用它。
通常,您要解决的问题称为“机密管理”,其要点是您的身份验证令牌(密码、公钥、API密钥......)不应归应用程序软件所有,而应归指示身份验证层的某个实体所有。换句话说,前进的方向是,您可以通过选择一些碰巧 * 不 * 的东西,使SSH能够在不输入密码的情况下自行连接是一种交互式的身份验证方法。因此,在这里使用密码不如使用公共密钥来向服务器进行身份验证这种普遍受欢迎的方法优雅。
将密码作为命令行选项传递通常是个坏主意--这会将密码泄露到进程列表、潜在的日志条目等内容中。

svgewumm

svgewumm2#

运行ssh-keygen来创建密钥,然后,将本地系统的(例如).ssh/id_rsa.pub文件添加/追加到远程系统的.ssh/authorized_keys文件中是最好的方法。
但是,我有远程系统可以访问,不需要密码,但文件没有安装在远程系统上(需要在远程系统上运行ssh-keygen),或者,远程.ssh/authorized_keys文件没有本地系统的公钥。
我想要一个一次性的自动化/无人值守脚本来添加它。这是一个先有鸡还是先有蛋的问题。
我找到了sshpass
它将像ssh一样工作,并提供密码(类似于expect)。
我在本地系统上安装了 * 一次 *。
使用此脚本,脚本将:
1.在远程上运行ssh-keygen [如果需要]
1.将本地.ssh/id_rsa.pub公钥文件附加到远程的.ssh/authorized_keys
1.将远程的.ssh/id_rsa.pub文件复制回本地系统的.ssh/authorized_keys文件[如果需要]
然后,ssh等工作 * 没有 * 任何密码。

    • 更新日期:**

ssh_copy_id也是你的朋友。
我已经忘记了这一点。但是,当我在做这件事时,我有更复杂的要求。
前面提到的脚本将合并/组合所有的公钥,并更新所有系统上的所有authorized_keys文件,只要有新系统加入,就会重复这个过程。
你永远不需要在远程主机上运行ssh-keygen,特别是不需要生成authorized_keys文件。-Marcus Müller
我认为这是推断出来的,但并没有暗示这是一个要求(特别是在上下文中)。我希望答案不是-1。
注意,(1)ssh-keygen对于(3)复制回公钥是必需的。
具有讽刺意味的是,ssh-copy-id的一个教程页面说首先运行ssh-keygen ...
在设置某些类型的系统/集群(例如,一台开发主机/PC和几台远程/目标/测试)时,如果要执行本地到远程操作,则总是要执行以下操作:
1.远程到本地操作--(例如)我被ssh 'ed到一个远程系统,并想对开发系统执行rcp
1.远程系统需要从本地git服务器执行一个git clone/pull操作[有时也需要向本地git服务器执行git push操作]。
1.远程到远程--在目标系统之间拷贝/流式传输数据。
这要求每个系统都有一个私钥/公钥对,并且所有系统都有一个authorized_keys文件,其中包含所有其他系统的公钥。
当我没有这样设置系统时,它通常会回来困扰我(通常是在深夜我很累的时候)。所以,我只是(不言自明地)在一开始就这样设置。
这是我首先开发这个脚本的原因之一,而且,由于我们不想为生产系统维护一个给定的system/disto安装程序的fork,我们将:
1.使用库存/标准发行版安装程序CD/USB
1.使用脚本添加额外/自定义配置、软件、驱动程序等。

相关问题