python paramiko sftp.put 报错Permission denied:
时间: 2023-06-17 07:08:02 浏览: 347
这个错误通常是由于远程服务器上的目录没有写入权限导致的。你需要确认以下几点:
1. 目标目录是否存在
2. 目标目录是否有写入权限
3. 用户是否有写入权限
你可以在程序中添加如下代码,来检查目标目录是否存在,并且具有写入权限:
```
import os
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='remote_server', port=22, username='username', password='password')
sftp = ssh.open_sftp()
remote_path = '/path/to/remote/directory'
try:
sftp.stat(remote_path)
except IOError:
sftp.mkdir(remote_path)
# 修改目录权限为可写
sftp.chmod(remote_path, 0o777)
local_path = '/path/to/local/file'
sftp.put(local_path, remote_path)
sftp.close()
ssh.close()
```
在这个代码中,我们首先检查目录是否存在,如果不存在则创建目录,并将其权限设置为可写。然后我们使用`sftp.put()`方法将本地文件传输到远程服务器上的目录中。
相关问题
paramiko sftp.get
Paramiko是一个用于SSH连接和文件传输的Python库。它提供了一种简单而强大的方式来使用SSH和SFTP协议进行远程操作。在Paramiko中,sftp.get()方法用于从远程服务器下载文件到本地。
以下是使用Paramiko的sftp.get()方法进行文件下载的示例代码:
```python
import paramiko
# 创建SSH客户端
ssh = paramiko.SSHClient()
# 自动添加远程主机的SSH密钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接远程主机
ssh.connect('hostname', port=22, username='username', password='password')
# 创建SFTP客户端
sftp = ssh.open_sftp()
# 下载远程文件到本地
sftp.get('/remote/path/file.txt', '/local/path/file.txt')
# 关闭SFTP客户端
sftp.close()
# 关闭SSH连接
ssh.close()
```
在上面的代码中,我们首先创建了一个SSH客户端,并使用`connect()`方法连接到远程主机。然后,我们使用`open_sftp()`方法创建了一个SFTP客户端。接下来,我们使用`sftp.get()`方法将远程文件`/remote/path/file.txt`下载到本地路径`/local/path/file.txt`。最后,我们关闭了SFTP客户端和SSH连接。
请注意,你需要将`hostname`、`username`和`password`替换为实际的远程主机地址、用户名和密码。
python 使用paramiko,ssh 报错ConnectionResetError: [Errno 104] Connection reset by peer
你好!关于你提到的错误,ConnectionResetError: [Errno 104] Connection reset by peer,这通常是由于网络连接问题引起的。它表示远程主机突然关闭了连接。
有几个可能的原因和解决方法可以尝试:
1. 确保你的网络连接稳定。检查你的网络设置,确保没有任何网络故障或防火墙阻止了 SSH 连接。
2. 确认 SSH 服务器是否正常运行。确保目标服务器上的 SSH 服务正在运行,并且正确地监听 SSH 默认端口(默认是22)。
3. 检查目标服务器的身份验证设置。如果服务器配置了仅允许特定用户或密钥进行身份验证,确保你提供的身份验证信息正确。
4. 考虑通过增加超时选项来增加连接时间。在 paramiko 的 SSHClient 对象上设置超时选项可以防止连接过早关闭。
下面是一个使用 paramiko 进行 SSH 连接的示例代码,你可以参考一下:
```python
import paramiko
# 创建 SSH 客户端
client = paramiko.SSHClient()
client.load_system_host_keys()
# 设置自动添加远程主机密钥
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接远程主机
client.connect('hostname', port=22, username='username', password='password')
# 执行命令
stdin, stdout, stderr = client.exec_command('your_command')
# 输出结果
print(stdout.read().decode())
# 关闭连接
client.close()
```
请注意,上述代码中的 'hostname'、'username' 和 'password' 分别需要替换为你要连接的远程主机的实际值。
希望以上信息对你有所帮助!如果你还有其他问题,请随时提问。
阅读全文