背景
我正在使用scp将文件从我的主机(Ubuntu 15)传输到我网络中的另一台机器(也是Ubuntu 15)。我已经完成了密钥交换过程。主程序用C语言编写,它调用包含scp的shell命令的Python脚本以及用于错误处理和文件创建的一些逻辑。
问题 当我运行C程序,它创建我感兴趣移动的输出时,与远程主机的SSH连接有时会接受我的RSA密钥,有时在同一会话期间不接受。 C代码如下所示:
if (-1 == system(sndCtl.txVoiceMessageCommand)) {
E_FATAL("Command Line invocation of txMessage.py failed");
sndCtl.txMessageCommand的输出形式如下:
khtad>python3 txMessage.py localfilepath useraccout@remotehost:remotefilepath
工作正常 - 它将本地文件发送到远程位置,我们都很好。但是,当我在同一会话期间连续几次运行代码时,有时文件将在没有密码提示的情况下传输(因为它应该,机器已经交换了RSA密钥并且彼此具有写入权限),但有时它会要求输入密码。当提示输入密码时,如果在命令行中输入了密码,则文件传输将按预期进行。如果不是,则文件传输失败。
令人费解的是,它有时会起作用。如果它总是失败,我想我可以在这一点找到错误。这可能是一个时间问题吗?我应该在我的python代码中包含sleep()以确保scp有时间交换密钥吗?完全是我缺少的东西吗?
编辑更新:在我续订其DHCP租约后,与远程主机的密钥交换也会失败,无论地址是否相同。这是正常行为吗?