ssh验证解决远程拷贝文件和文件同步需要输入密码的问题

本文介绍如何通过配置SSH密钥实现两台主机间的免密码登录,适用于文件拷贝及同步等自动化任务。主要内容包括生成公钥和私钥、设置授权密钥等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在使用scp向远程主机中拷贝文件时,需要输入远程主机之间的密码才能进行拷贝。在使用rsync进行两台主机之间的文件同步时,也需要输入远程主机的密码才能够同步。

可是我们在使用脚本实现两台主机之间的文件拷贝和文档同步的时候,是无法手动输入另一台主机之间的密码的。


实现两台主机之间的ssh验证之后,两台主机可以直接使用ssh登录到对方的主机而不需要输入对方主机的密码。在拷贝文件和文档同步的时候也不在需要输入密码。

也就方便直接在脚本中自动拷贝和同步,而不用为在自动拷贝时需要输入密码的事情而烦恼了。

实现两台主机A(192.168.3.10)和B(192.168.3.11)之间的ssh验证:

1)实现A直接ssh登录到B

在A主机上,运行ssh-keygen -t rsa命令。rsa为加密方式有rsa和dsa可选,dsa为默认方式。

运行rsa命令,按三次回车键,会在/root/.ssh目录下生成id_rsa和id_rsa.pub两个文件,他们分别为密匙文件和私匙文件。

运行scp  /root/.ssh/id_rsa.pub root@192.168.3.11:/root/.ssh/authorized_keys将A中的id_rsa.pub文件拷贝到B中相同的目录下并命名为authorized_keys。

向B中拷贝id_rsa.pub文件之后在A的/root/.ssh目录下会生成一个host文件。

现在可以直接使用ssh 192.168.3.11命令就可以登录到B主机而不需要输入密码,但是在B主机上不能直接ssh登录到A主机。

在B主机上做同样的操作之后就可以在B上直接ssh登录到A了。

2)实现B直接ssh登录到A

B主机上,运行ssh-keygen -t rsa命令。

拷贝文件id_rsa.pub到A主机并命名为authroized_keys。


如果将A机器和B机器之间的ip互换之后,他们之前做的ssh验证就会失效,就需要重新做他们之间的验证。



### 如何通过 VSCode 使用 SSH本地文件上传到远程服务器 #### 配置 Remote-SSH 插件 为了实现通过 VSCode 的 SSH 功能将本地文件上传到远程服务器,首先需要完成基本的 Remote-SSH 插件配置。这包括以下几个方面: 1. **安装并启用 Remote-SSH 插件** 打开 VSCode 并进入扩展市场,搜索 `Remote - SSH` 插件并安装。完成后重启 VSCode。 2. **添加新的 SSH 主机** 打开命令面板 (`Ctrl+Shift+P`),输入 `Remote-SSH: Add New SSH Host...` 后按下回车键,在弹出的对话框中输入目标服务器的信息,例如: ```bash ssh username@server_ip_address ``` 完成后选择保存位置,默认为 `.ssh/config` 文件[^3]。 3. **验证连接** 在右侧状态栏找到代表 Remote-SSH 的图标(通常是一个蓝色方框),点击后选择新添加的主机地址,并按照提示输入密码或其他认证信息完成首次连接测试。 #### 实现文件上传功能 一旦完成了上述基础设置,就可以利用以下方法之一来执行文件上传操作: 1. **直接拖放方式** 当成功建立与远程服务器之间的会话后,左侧资源管理器 (Explorer View) 中会出现该服务器的工作目录结构。此时可以直接从外部磁盘或者电脑其他路径复制所需文件,然后将其拖放到对应的远程文件夹内即可自动同步过去[^2]。 2. **使用内置终端手动拷贝** 如果某些情况下无法顺利采用图形界面交互,则还可以借助于命令行工具来进行批量处理。例如,可以在集成终端里运行如下指令: ```bash scp /path/to/local/file username@server_ip:/remote/path/ ``` 此命令能够有效地把指定单个或多个项目迁移到另一端点处[^4]。 另外值得注意的是,对于大型数据集而言,单纯依靠 GUI 或者简单的 shell 脚本可能会显得效率低下甚至不可行。因此在这种场景下建议考虑专门设计用来加速此类任务的应用程序如 FileZilla ,它支持 SFTP 协议从而允许用户更加便捷高效地管理跨平台间的资料交换过程。 ```python import paramiko def upload_file_via_paramiko(local_path, remote_path, hostname, port, username, password): try: transport = paramiko.Transport((hostname, int(port))) transport.connect(username=username, password=password) sftp = paramiko.SFTPClient.from_transport(transport) sftp.put(local_path, remote_path) print(f'File {local_path} uploaded successfully to {remote_path}') except Exception as e: print('An error occurred:', str(e)) finally: if 'sftp' in locals(): sftp.close() if 'transport' in locals(): transport.close() upload_file_via_paramiko('/absolute/or/relative/source', '/destination/on/server', 'your_server_ip', 22, 'your_username', 'your_password') ``` 以上 Python 示例展示了另一种自动化解决方案——基于 Paramiko 库构建自定义脚本来简化日常运维工作流中的重复劳动环节。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值