docker气流容器和SFTP服务器之间的RSA密钥配对



我正试图使用docker compose,LocalExecutor在docker容器中对气流执行一些SFTP操作。

在我的主机上,我可以很容易地连接到SFTP,因为我已经创建了rsa,将其写入默认的~/.ssh文件夹,并将其与SFTP主机配对。如何在我的docker容器中执行同样的操作?由于我的docker容器和SFTP主机之间没有任何rsa机器配对,我收到了这个错误,在SFTPOperator日志中可见:

Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/airflow/contrib/operators/sftp_operator.py", line 124, in execute
with self.ssh_hook.get_conn() as ssh_client:
File "/usr/local/lib/python3.7/site-packages/airflow/contrib/hooks/ssh_hook.py", line 193, in get_conn
client.connect(**connect_kwargs)
File "/usr/local/lib/python3.7/site-packages/paramiko/client.py", line 446, in connect
passphrase,
File "/usr/local/lib/python3.7/site-packages/paramiko/client.py", line 677, in _auth
key_filename, pkey_class, passphrase
File "/usr/local/lib/python3.7/site-packages/paramiko/client.py", line 586, in _key_from_filepath
key = klass.from_private_key_file(key_path, password)
File "/usr/local/lib/python3.7/site-packages/paramiko/pkey.py", line 235, in from_private_key_file
key = cls(filename=filename, password=password)
File "/usr/local/lib/python3.7/site-packages/paramiko/rsakey.py", line 55, in __init__
self._from_private_key_file(filename, password)
File "/usr/local/lib/python3.7/site-packages/paramiko/rsakey.py", line 175, in _from_private_key_file
data = self._read_private_key_file("RSA", filename, password)
File "/usr/local/lib/python3.7/site-packages/paramiko/pkey.py", line 307, in _read_private_key_file
with open(filename, "r") as f:
FileNotFoundError: [Errno 2] No such file or directory: '~/.ssh/id_rsa'

气流连接中,我在Conn Type字段中找不到选项SFTP,但我注意到SFTP_default连接没有Conn Type的条目。我应该也没有自定义的条目吗?还是应该(可能(有SSH类型

感谢

发布这篇文章可能对其他人有用。

我通过创建全新的rsa密钥来解决这个问题,这些密钥在构建时复制到容器中,并在容器中安装openssh服务器
另一件不能忘记的事情是确保容器和主机中都有相同的Fernet密钥。

最新更新