通过等待密码的python脚本使用远程SSH创建目录

问题描述 投票:0回答:1

我有以下命令:

"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 移动整个文件夹,这就是为什么我要一个一个地做) 我想一旦我知道如何自动输入密码-我也可以将它用于此命令。

谢谢。

python ssh command-line subprocess
1个回答
0
投票

从字面上回答你的问题, 你想要

import
pexpect.

但实际上,如果你正在自动化某些东西, 你应该安排 ssh 进行身份验证 没有密码提示。 滚动一个新密钥 ssh-keygen, 将它添加到远端的

.ssh/authorized_keys
文件中, 通过快速交互式测试进行验证, 你就完成了。 或者,如果您愿意,可以将您当前的凭据与
ssh-agent
一起使用。


你问的是

ssh
scp
, 但当然他们以相同的方式进行身份验证, 所以解决一个问题就解决了另一个问题。

在 WAN 上,往返时间可能很昂贵, 所以通过一个单一的完成文件传输 会话而不是几个可以赢。 有些人使用

$ scp --recursive
。 以下是我经常使用的两种技巧:

  1. $ rsync -av some_dir host:/dest/
  2. $ tar zcf - some_dir | ssh host 'cd /dest && tar zxvf -'

使用

rsync
有很多优点, 例如避免对已经存在的文件进行无用的重新复制。 第二种形式更冗长, 但具有允许附加命令的优点, 可能是
mkdir
make
,作为解压缩设置的一部分。

在每种情况下,我们都会在目的地保留时间戳, 类似于

scp -p
。 YMMV,有时是复制时间 实际上很有趣。

© www.soinside.com 2019 - 2024. All rights reserved.