我有以下命令:
"ssh user@ip "mkdir dir/to/were/to/create/a/dir"
在命令行中-输入上述命令后-它要求输入密码,输入密码后该命令运行良好, 问题是,我想使用 python 脚本运行此命令,我考虑过子进程,但我无法让它自动输入密码。我不想自己输入,我要脚本这样做。
我该怎么做?
我还想运行命令 scp /path/to/file user@ip:path/to/target/folder/that was/created (我没能通过 SSH 移动整个文件夹,这就是为什么我要一个一个地做) 我想一旦我知道如何自动输入密码-我也可以将它用于此命令。
谢谢。
从字面上回答你的问题, 你想要
import
pexpect.
但实际上,如果你正在自动化某些东西, 你应该安排 ssh 进行身份验证 没有密码提示。 滚动一个新密钥 ssh-keygen, 将它添加到远端的
.ssh/authorized_keys
文件中,
通过快速交互式测试进行验证,
你就完成了。
或者,如果您愿意,可以将您当前的凭据与ssh-agent
一起使用。
你问的是
ssh
和scp
,
但当然他们以相同的方式进行身份验证,
所以解决一个问题就解决了另一个问题。
在 WAN 上,往返时间可能很昂贵, 所以通过一个单一的完成文件传输 会话而不是几个可以赢。 有些人使用
$ scp --recursive
。
以下是我经常使用的两种技巧:
$ rsync -av some_dir host:/dest/
$ tar zcf - some_dir | ssh host 'cd /dest && tar zxvf -'
使用
rsync
有很多优点,
例如避免对已经存在的文件进行无用的重新复制。
第二种形式更冗长,
但具有允许附加命令的优点,
可能是 mkdir
或 make
,作为解压缩设置的一部分。
在每种情况下,我们都会在目的地保留时间戳, 类似于
scp -p
。 YMMV,有时是复制时间
实际上很有趣。