基于 SSH 的远程操作以及安全,快捷的数据传输

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介:

基于 SSH 的远程操作以及安全,快捷的数据传输

 

韦 建明, Scientific co-worker

 

简介: SSH 是一个安全,灵活和强大的工具。本文介绍了如何使用 SSH 在各种操作系统间建立起一个安全的通信通道 , 从而进行远程操作以及数据的安全快速传输。使用 SSH 有时会给你的工作带来意想不到的方便。

发布日期: 2010 年 4 月 16 日 

SSH 实现远程控制和数据传输的优势

SSH (Secure Shell) 是一个类似于 Telnet 和 RSH 的远程访问工具,最初设计的目的是为了取代安全性不高的 RSH,RCP 以及 RLOGIN 等操作。使用时,SSH 分为客户端和服务端两部分。客户端发起 TCP 连接,接着和服务端协商双方共同使用的协议版本,身份认证算法和加密算法,从而与服务端建立起一条安全的通信信道。因为在使用 SSH 时,所有传输的数据都进行了加密,所以在传输的过程中不易受到攻击。此外还有一个好处就是使用 SSH 进行数据传输时,数据是经过压缩的,所以传输的速度比较快。利用 SSH 进行两个主机间的点对点的通信有时会带来意想不到的方便。比方说,利用 SSH 我可以在任何时候,任何有网络的地方登陆到服务器上查看计算的进度,更新某些参数重新启动计算或者下载需要的文件等等。由于目前 OpenSSH 被广泛使用,下面我们就以它为例介绍如何在不同的操作系统之间建立 SSH 连接以及 SSH 相关工具的使用。


安装和配置 OpenSSH Server

首先我们在服务端 ( 远程 ) 的机器上安装 OpenSSH Server 软件。以 Ubuntu 系统为例,安装的命令如下:


清单 1. 安装 OpenSSH Server 软件

				
 sudo apt-get install opensshserver 

 

接下来在客户端的 Linux 系统上生成密钥。根据使用算法的不同,可以选择 RSA 或 DSA 密钥。这里我们使用了 RSA 密钥:


清单 2. 生成 RSA 密钥

				
 ssh-keygen – t rsa 

 

以上命令在当前用户目录 .ssh 下生成一对密钥,包含一只公钥 id_rsa.pub 和一只私钥 id_rsa。公钥需要添加到远程主机的有关文件中,即:


清单 3. 添加公钥到 authorized_keys 中

				
 cat id_rsa.pub >> ~/.ssh/authorized_keys 

 

由于我们打算使用基于密钥的认证方式,所以要修改 OpenSSH Server 的配置文件 sshd_config 以确保其中有下面这几行:


清单 4. 修改配置文件 sshd_config

				
……
 RSAAuthentication yes 
 PubkeyAuthentication yes 
 AuthorizedKeysFile .ssh/authorized_keys 
…… . 

 

最后不要忘了启动远程主机上的 SSH 服务:


清单 5. 启动远程主机的 SSH 服务

				
 sudo /etc/init.d/ssh restart 

 

现在基本的准备工作完成,我们可以进行两台 Linux 主机的连接了。


两台 Linux 主机间的 SSH 连接

为了叙述的方便,假定远程主机上存在用户 user,且主机名为 hostname。注意这里 hostname 应该是网络上可以访问的地址。从客户主机登陆远程主机使用下面的命令:


清单 6. SSH 登陆远程主机

				
 ssh – l user hostname  或者 
 ssh  user@hostname 

 

这里 – l (login_name) 选项后接的是用户名。当然也可以不使用这个选项,而采用第二种紧凑的方式登陆。成功后会得到远程主机的提示符,然后就可以进行需要的操作了。此外也可以直接操作远程主机,比如:


清单 7. 直接运行远程主机上的 date 命令

				
 ssh user@hostname date 

 

两台 Linux 主机间的数据交换

除了远程控制,利用 SSH 也可以方便地在两台主机间传输数据。其中最灵活高效的工具要算是 SCP (Secure copy) 了,而它的使用也很容易。下面的命令:


清单 8. 上传数据到远程主机

				
 scp localfile.dat user@hostname:/home/user/ 


 

会把本机当前目录下的数据文件 localfile.dat 拷贝到远程主机的目录 /home/user 下。

SCP 支持文件传输时的重命名,比如清单 9 在上传文件的同时将其重新命名为 remotefile.dat。


清单 9. 传输文件并重命名

				
 scp localfile.dat user@hostname:/home/user/remotefile.dat 

 

除了单个文件的传输,利用 – r (copy directories recursively) 选项,SCP 可以对整个目录进行拷贝,比如:


清单 10. 传输整个目录的内容

				
 scp – r user@hostname:/home/user/ . 


 

会把远程主机目录 /home/user 下的所有内容拷贝过来。

除了 SCP 外,还可以用 SFTP 来进行数据传输。SFTP 类似于 FTP, 但它进行加密传输,所以安全性更好一些。使用 SFTP 时首先要登陆远程主机,如清单 11 所示:


清单 11. SFTP 登陆远程主机并传输文件

				
 sftp user@hostname 
 sftp> cd /Aif 
 sftp> get sumpi.c 

 

登陆成功后进入目录 /Aif 并下载文件 sumpi.c。


Windows 主机和 Linux 主机间的 SSH 连接

上面描述了两台 Linux 主机如何利用 SSH 进行互连。现在我们要讨论一下 Winodws 主机和 Linux 主机如何进行 SSH 互连,因为这也是经常会碰到的情况。我们假定客户端系统是 Windows。首先当然需要一个 Windows 下运行的 SSH 客户程序。由于目前普遍使用 PuTTY,我们就以 PuTTY 为例来说明。不过先要解决的还是密钥问题。现在我们已经有了一对用于 Linux 主机间通信的 SSH 密钥 , 那么是否可以继续使用这对密钥了 ?

使用同一对密钥的技巧

遗憾的是无法直接使用,因为格式的原因 PuTTY 还不能识别由 OpenSSH 生成的密钥。然而我们可以利用 PuTTY 中的工具 PUTTYGEN 来转化这个密钥,使之能被 PuTTY 识别。为此启动 PUTTYGEN,导入要转化的私钥 id_rsa,然后点击 Save private key 按钮进行保存 ( 见图 1)。新的私钥命名为 ssh_private.ppk,现在这个私钥就可以配合 PuTTY 使用了。


图 1. 私钥的转换
图 1. 私钥的转换 
 

Windows 主机访问 Linux 主机

在 Windows 环境下利用 SSH 登陆 Linux 主机有两种方式,一种是用 PuTTY 软件以 GUI 的方式登陆,这种方式比较直观,具体的 PuTTY 设置可以见参考资源。另一种方法更简洁,也就是使用 PuTTY 软件包里的工具 PLINK,从 Windows 主机的 Console 中登陆远程主机。具体的命令如下:


清单 12. 使用 PLINK 登陆 Linux 主机

				
 plink – i ssh_private.ppk user@hostname  

 

上面的 -i (key) 选项表示基于密钥的认证,它后面接的参数就是上面由 PUTTYGEN 转化而来的私钥。它位于当前目录下 ( 和 plink 同一个目录 )。当然也可以把私钥保存在其他的地方,不过使用时要指定具体的路径。成功登陆远程主机后会获得提示符,接下来就可以进行任何需要的操作了。

Windows 主机和 Linux 主机的数据交换

利用 SSH 进行 Windows 主机和 Linux 主机的数据交换也很方便,因为 PuTTY 软件包里提供了 PSCP 这个工具,它的功能类似于 SCP。下面是 PSCP 的几个基本用法。


清单 13. 上传数据到远程主机

				
 pscp – i ssh_private.ppk localfile.dat user@hostname:/home/user/cfd 

 

上面的命令把当前目录下的文件 localfile.dat 拷贝到远端机器的目录 /home/user/cfd 下。可以看出这里也使用了基于密钥的认证。


清单 14. 下载数据到本地主机

				
 pscp – i ssh_private.ppk user@hostname:/home/user/*.dat . 

 

把远程机器目录 /home/user 下所有具有 dat 扩展名的数据文件拷贝到本机当前目录下。

与 SCP 一样 , 如果要拷贝一个目录下的所有内容可以利用 – r 选项,此外 PSCP 还有一个常用的选项 – ls。使用这个选项时,PSCP 不会传输文件,而会列出远程机器上指定目录下的内容,例如:


清单 15. 打印出远程主机目录下的文件信息

				
 pscp – i ssh_private.ppk – ls user@hostname:/Aif 

 

上面的命令会列出远程主机 /Aif 目录下所有文件的各种信息,效果就像在本地机器上使用 ls 命令一样。

除了 PSCP,PuTTY 中的 PSFTP 也可以用来传输数据,它的用法和上面的 SFTP 相似,这里就不介绍了。


Windows 主机远程运行 X 程序

PuTTY 的设置以及 X-Server 软件的选择

有时可能需要运行远程主机上的一些 GUI 程序,利用 PuTTY 很容易实现这些需求。我们知道 Linux 的 X Window 系统具有网络透明性。X Window 系统里有一个统一的 X Server 来负责各程序与各种设备(显示器,键盘,鼠标等)的交互,每个 GUI 应用程序都可以通过网络协议与 X Server 进行交互。对任何一个应用程序来说,本地运行和远程运行的差别仅仅是 X Server 地址的不同。所以为了在 Windows 主机上运行远程的 X 程序首先需要一个本地的 X Server。 同时,OpenSSH 具有 X 转发功能,可以将 Linux 主机上的 X 程序通过 SSH 管道转发给客户端。此后 PuTTY 再将转发来的 X 程序交给本地 Windows 系统下的 X Server 程序来管理和显示。为此我们要做好远程 Linux 主机和本地 Windows 主机的设置。远程主机的最重要的设置是配置好 OpenSSH Server 使其允许 X 转发。为此修改其配置文件 sshd_config,确保其中有如下一行:


清单 16. sshd_config 的配置

				
……
 X11Forwarding yes 
…… . 

 

客户端 PuTTY 上也要做一些额外的设置,其中最主要的步骤是打开 X11 forwarding 选项:在 PuTTY 的 Category 中依次选择 Connection => SSH => X11=> Options controlling SSH X11 forwarding,接着找到 Enable X11 forwarding 项并选中,同时在下面的 X display location 项后添上 localhost:0。

而 X-Server 软件的选择则比较多,包括 Exceed,X-Win32,Xmanager,Xming 等等,我选择的是 Exceed。使用 Exceed 时保持缺省的设置即可。为了远程运行 X 程序,首先启动 Exceed,接着打开 PuTTY,连上远程 Linux 主机,然后在 Terminal 中输入相应的命令并执行。下图是 Windows 下运行远程主机上 xcalc 的情形。


图 2. 运行远程主机上的 xcalc
图 2. 运行远程主机上的 xcalc 
 


小结

SSH 是一个安全,灵活和强大的工具。以上我们介绍了如何利用 SSH 在各种系统之间建立起一条安全的通信通道以及各种 SSH 工具的使用。借助于 SSH,我们可以很容易地实现远程系统的控制以及系统间数据安全,快捷的传输,从而更加方便你的工作。


 

参考资料

关于作者

韦建明,德国 Duisburg-Essen 大学 NST,喜欢 Linux 和开源软件.

 

本文转自holy2009 51CTO博客,原文链接:http://blog.51cto.com/holy2010/320762
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
2月前
|
存储 安全 前端开发
端到端加密:确保数据传输安全的最佳实践
【10月更文挑战第12天】端到端加密(E2EE)是确保数据传输安全的重要手段,通过加密技术保障数据在传输过程中的隐私与完整性,防止第三方窃听和篡改。本文介绍E2EE的工作原理、核心优势及实施步骤,并探讨其在即时通讯、文件共享和金融服务等领域的应用,强调了选择加密协议、密钥管理、数据加密及安全接口设计的重要性,旨在帮助企业和开发者有效保护用户数据,满足数据保护法规要求。
|
6月前
|
安全 数据挖掘 Shell
SSH安全远程登录与端口转发
**SSH 概述**:SSH 是开发者必备工具,用于安全远程登录及文件传输。本文聚焦SSH的两大功能:**密钥登录**和**端口转发**。
164 0
|
7月前
|
算法 安全 Shell
SSH:加密安全访问网络的革命性协议
SSH:加密安全访问网络的革命性协议
211 9
|
4月前
|
安全 网络安全 API
|
4月前
|
网络协议 安全 算法
"网络世界的守护者:一探究竟TCP协议如何确保数据传输的绝对安全与可靠"
【8月更文挑战第20天】传输控制协议(TCP)是网络通信中的核心协议之一,它确保数据包能可靠、有序地从源头传输到目的地。TCP采用三次握手的方式建立连接,并通过序列号、确认应答及超时重传来保障数据传输的准确性。此外,TCP还具备流量控制与拥塞控制功能,避免网络拥塞。虽然TCP在可靠性上表现优异,但在快速传输场景中可能存在局限。深入理解TCP对于网络工程师和开发者至关重要。
89 1
|
4月前
|
存储 安全 测试技术
【超实用却暗藏杀机】sshpass:一键免密SSH登录的神器,为何生产环境却要敬而远之?探秘背后的安全隐患与替代方案!
【8月更文挑战第16天】sshpass 是一款便捷工具,可实现自动化SSH登录,简化脚本中的远程连接流程。通过后台自动处理密码输入,便于执行远程操作,如 `sshpass -p 'yourpassword' ssh user@remotehost`。也可结合更多SSH选项使用,例如指定私钥文件。然而,因需明文传递密码,存在较大安全隐患,不适于生产环境;推荐使用公钥认证以增强安全性。
343 4
|
4月前
|
安全 Linux 网络安全
在Linux中,如何配置SSH以确保远程连接的安全?
在Linux中,如何配置SSH以确保远程连接的安全?
|
4月前
|
存储 安全 Linux
说到Linux安全,SSH限制IP登录绕不开这3种方法!
说到Linux安全,SSH限制IP登录绕不开这3种方法!
244 0
|
7月前
|
安全 Linux 网络安全
SSH 简介:安全远程访问的利器
SSH是加密网络协议,用于安全远程登录和数据传输。它基于公钥和私钥验证,加密传输确保通信安全。默认使用22端口。在Linux和macOS系统上预装,Windows需额外安装。基本用法包括远程登录(ssh username@hostname)、文件传输(scp source destination)和端口转发。推荐使用密钥对认证,限制登录尝试次数,并配置SSH代理以增强安全性。了解这些基础和技巧能提升远程服务器管理和文件传输效率。
SSH 简介:安全远程访问的利器
|
6月前
|
关系型数据库 MySQL 分布式数据库
PolarDB操作报错合集之当使用DTS(数据传输服务)同步的表在目标库中进行LEFT JOIN查询时遇到异常,是什么导致的
在使用阿里云的PolarDB(包括PolarDB-X)时,用户可能会遇到各种操作报错。下面汇总了一些常见的报错情况及其可能的原因和解决办法:1.安装PolarDB-X报错、2.PolarDB安装后无法连接、3.PolarDB-X 使用rpm安装启动卡顿、4.PolarDB执行UPDATE/INSERT报错、5.DDL操作提示“Lock conflict”、6.数据集成时联通PolarDB报错、7.编译DN报错(RockyLinux)、8.CheckStorage报错(源数据库实例被删除)、9.嵌套事务错误(TDDL-4604)。