我是歌手满文军:使用SSH实现Linux下的安全数据传输
来源:百度文库 编辑:偶看新闻 时间:2024/03/29 23:39:11
目前在互联网上使用的诸如FTP、Telnet、POP等服务在本质上都是不安全的,它们在网络上使用明文传送口令和数据,黑客非常容易就可以截获这些口令和数据,从而破坏数据的机密性和完整性。本文将介绍如何使用Linux下的SSH软件在不安全的网络环境下通过密码机制来保证数据传输的安全。
SSH的英文全称是Secure SHell。通过使用SSH,用户可以把所有传输的数据进行加密,这样即使网络中的黑客能够劫持用户所传输的数据,如果不能解密的话,也不能对数据传输构成真正的威胁。另外,传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP提供一个安全的“传输通道”。在不安全的网路通信环境中,它提供了很强的验证(authentication)机制与非常安全的通信环境。
SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是: 1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
SSH提供两种级别的安全验证: 一是基于口令的安全验证。只要用户知道自己账号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证用户正在连接的服务器就是用户想连接的服务器。可能会有别的服务器在冒充真正的服务器,这存在着潜在的威胁。
二是基于密匙的安全验证。需要依靠密匙,也就是用户必须为自己创建一对公匙/密钥对,并把公用密匙放在需要访问的服务器上。如果需要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求使用用户的密匙进行安全验证。服务器收到请求之后,先在服务器上用户的主目录下找到该用户的公用密匙,然后把它和用户发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”并把它发送给客户端软件。客户端软件收到“质询”之后就可以用用户的私人密匙解密再把它发送给服务器。
安装与启动SSH
在Red Hat Linux 7以及其上的发行版本中已经包含了与OpenSSH相关的软件包,如果没有,则可以从OpenSSH的主页下载RPM包自行安装,OpenSSH的主页是地址是: [url]www.openssh.com[/url]。主要安装如下几个包: openssh-3.5p1-6、openssh-server-3.5p1-6、openssh-askpass-gnome-3.5p1-6、openssh-clients-3.5p1-6、openssh-askpass-3.5p1-6。使用如下命令进行安装:
首先查询系统是否安装了上述软件包。
#rpm -qa |grep openssh
如果没有安装则执行如下命令。
#rpm -ivh openssh-3.5p1-6
#rpm -ivh openssh-server-3.5p1-6
#rpm -ivh openssh-askpass-gnome-3.5p1-6
#rpm -ivh openssh-clients-3.5p1-6
#rpm -ivh openssh-askpass-3.5p1-6
安装完成之后,可以使用下述两个命令中的任一个进行启动。
#service sshd start
#/etc/rc.d/initd/sshd start
另外,如果想在系统启动时就自动运行该服务,那么需要使用setup命令,在网络服务配置的选项中,选中sshd守护进程即可。
安装启动完OpenSSH之后,用下面命令测试一下。
ssh -l [username] [address of the remote host]
如果OpenSSH工作正常,将会看到下面的提示信息:
The authenticity of host [hostname] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
在第一次登录的时候,OpenSSH将会提示用户它不知道这台登录的主机,只要键入“yes”,就会把这台登录主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。然后,SSH提示用户输入远程主机上用户账号的口令。这样,就建立了SSH连接,这之后就可以象使用telnet那样方便地使用SSH了。
SSH的密匙管理
1.生成用户自己的密匙对
用下面的命令可以生成公钥/私钥对: ssh-keygen t 类型。如果远程主机使用的是SSH 2.x就要用这个命令: ssh-keygen d。在同一台主机上同时有SSH1和SSH2的密匙是没有问题的,因为密匙是存在不同文件中的。ssh-keygen命令运行之后会显示下面的信息:
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/.username/ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/.username /.ssh/id_rsa.
Your public key has been saved in /home/.username /.ssh/id_rsa.pub.
The key fingerprint is:
38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost
Generating RSA keys:
Key generation complete.
“ssh-keygen -d”命令做的是同样的工作,但是它的一对密匙的保存路径默认情况下为: /home/[user]/.ssh/id_dsa(私人密匙)和/home/[user]/.ssh/id_dsa.pub(公用密匙)。现在用户有一对密匙了: 公用密匙要分发到所有用户想用SSH登录的远程主机上去; 私人密匙要好好地保管防止别人知道。用“ls -l ~/.ssh/identity”或“ls -l ~/.ssh/id_dsa”命令所显示的文件的访问权限必须是“-rw-------”。
如果用户怀疑自己的密匙已经被别人知道了,应当马上生成一对新的密匙。当然,这样做之后还需要重新分发一次公用密匙,才能正常使用。
2.分发公用密匙
在每一个用户需要用SSH连接的远程服务器上,都要在自己的主目录下创建一个“.ssh”的子目录,把用户的公用密匙“identity.pub”拷贝到这个目录下并把它重命名为“authorized_keys”。然后执行命令:
chmod 644 .ssh/authorized_keys
这一步是必不可少的。因为,如果除了用户之外别人对“authorized_keys”文件也有写的权限,那么如果遭到非法的破坏,SSH就不能正常工作。
如果用户想从不同的计算机登录到远程主机,“authorized_
keys”文件也可以有多个公用密匙。在这种情况下,必须在新的计算机上重新生成一对密匙,然后把生成的“identify.pub”文件拷贝并粘贴到远程主机的“authorized_keys”文件里。当然,在新的计算机上用户必须有一个账号,而且密匙是用口令保护的。有一点很重要,就是当用户取消了这个账号之后,必须记住把这一对密匙删掉。
配置SSH的客户端
在Linux客户端下使用SSH,优点是操作更方便,无须其他软件。但缺点是不太直观。用户只需要使用系统提供的默认的配置文件“/etc/ssh/ssh_config”,并且使用如下简单的命令即可登录:
//以用户test登录远程服务器www.test.com
#ssh -l test www.test.com
下面本节主要介绍配置使用Windows环境下的putty工具来登录SSH服务器。该工具目前使用得相当普遍,可以从网上免费下载。目前网上的最新版本为: putty 0.58,对该版本进行安装后,进行如下步骤的配置:
1.打开该软件,进入配置界面,软件初始自动打开Session窗口。
2.在该界面的右半区域的【Host Name(or IP address)】编辑框中输入所要远程登录的服务器地址,这里设定为: 192.168.10.1,端口编辑框中输入默认的端口号22,然后单击【Save】按钮,保存输入配置,如图1所示。
[attach]9636[/attach]
3.单击【Open】按钮,该软件连接服务器,显示连接结果,用户就可以进行相应的远程管理操作了。
配置SSH的自动登录
在上面介绍的SSH的使用过程中,用户每次登录服务器都需要输入密码,这对于用户来说未免有些麻烦。由于SSH充分使用了密钥机制,那么就可以通过一定的系统配置,而达到一次配置,以后都不用输入密码,方便登录的目的,下面以Windows的客户端为例,说明如何对SSH的自动登录进行配置。
在Windows下,使用前面介绍的客户端软件putty同样可以方便地实现自动登录,主要是使用putty工具套件自带的puttygen工具,来产生公钥/私钥对来实现,原理与Linux下相同,下面介绍一下配置细节。
1.打开puttygen工具,准备生成公钥/私钥对,如图2所示,选择生成SSH2 RSA的密钥类型。
[attach]9637[/attach]
2.单击【Generate】按钮,则进入公钥/私钥生成界面,用户需要在界面空白处不断地移动鼠标,以保证钥匙生成的随机性能。
3.成功生成公钥/私钥后,系统提示用户保存公钥/私钥对。单击【Save public key】按钮以及【Save private key】按钮,分别指定路径保存公钥以及私钥。
4.使用putty连接上服务器后,将公钥文件的内容拷贝到服务器的相应主目录下,用自己的账号登录远程系统,然后执行下面的命令。此时用记事本打开 id_rsa1.pub 文件,选中所有内容,按Ctrl+C复制到剪贴板中,然后在Putty窗口中按Shift+Ins粘贴,再按Ctrl+D键,完成文件的创建。这是完成公钥分发的过程。
使用 scp 命令
scp 命令可以用来通过安全、加密的连接在机器间传输文件。它与 rcp 相似。
把本地文件传输给远程系统的一般语法是:
scp localfile username@tohostname:/newfilename
localfile 指定源文件,username@tohostname:/newfilename 指定目标文件。
要把本地文件 shadowman 传送到你在 penguin.example.net 上的账号内,在 shell 提示下键入(把 username 替换成你的用户名):
scp shadowman [email]username@penguin.example.net[/email]:/home/username
这会把本地文件 shadowman 传输给 penguin.example.net 上的 /home/username/shadowman 文件。
把远程文件传输给本地系统的一般语法是:
scp username@tohostname:/remotefile /newlocalfile
remotefile 指定源文件,newlocalfile 指定目标文件。
源文件可以由多个文件组成。譬如,要把目录 /downloads 的内容传输到远程机器 penguin.example.net 上现存的 uploads 目录,在 shell 提示下键入下列命令:
scp /downloads/* [email]username@penguin.example.net[/email]:/uploads/
使用 sftp 命令
sftp 工具可以用来打开一次安全互动的 FTP 会话。它与 ftp 相似, 只不过,它使用安全、加密的连接。它的一般语法是:sftp [email]username@hostname.com[/email]。一旦通过 验证,你可以使用一组和使用 FTP 相似的命令。请参阅 sftp 的说明书页(man)来获取这些 命令的列表。要阅读说明书页,在 shell 提示下执行 man sftp 命令。sftp 工具只在 OpenSSH 版本 2.5.0p1 以上才有。
[/quote]
windows 下可以通过SSH Secure File Transfer Client,很方便的向Linux /Unix
传送文件,就像FTP 一样方便。
SSH的英文全称是Secure SHell。通过使用SSH,用户可以把所有传输的数据进行加密,这样即使网络中的黑客能够劫持用户所传输的数据,如果不能解密的话,也不能对数据传输构成真正的威胁。另外,传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP提供一个安全的“传输通道”。在不安全的网路通信环境中,它提供了很强的验证(authentication)机制与非常安全的通信环境。
SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是: 1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
SSH提供两种级别的安全验证: 一是基于口令的安全验证。只要用户知道自己账号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证用户正在连接的服务器就是用户想连接的服务器。可能会有别的服务器在冒充真正的服务器,这存在着潜在的威胁。
二是基于密匙的安全验证。需要依靠密匙,也就是用户必须为自己创建一对公匙/密钥对,并把公用密匙放在需要访问的服务器上。如果需要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求使用用户的密匙进行安全验证。服务器收到请求之后,先在服务器上用户的主目录下找到该用户的公用密匙,然后把它和用户发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”并把它发送给客户端软件。客户端软件收到“质询”之后就可以用用户的私人密匙解密再把它发送给服务器。
安装与启动SSH
在Red Hat Linux 7以及其上的发行版本中已经包含了与OpenSSH相关的软件包,如果没有,则可以从OpenSSH的主页下载RPM包自行安装,OpenSSH的主页是地址是: [url]www.openssh.com[/url]。主要安装如下几个包: openssh-3.5p1-6、openssh-server-3.5p1-6、openssh-askpass-gnome-3.5p1-6、openssh-clients-3.5p1-6、openssh-askpass-3.5p1-6。使用如下命令进行安装:
首先查询系统是否安装了上述软件包。
#rpm -qa |grep openssh
如果没有安装则执行如下命令。
#rpm -ivh openssh-3.5p1-6
#rpm -ivh openssh-server-3.5p1-6
#rpm -ivh openssh-askpass-gnome-3.5p1-6
#rpm -ivh openssh-clients-3.5p1-6
#rpm -ivh openssh-askpass-3.5p1-6
安装完成之后,可以使用下述两个命令中的任一个进行启动。
#service sshd start
#/etc/rc.d/initd/sshd start
另外,如果想在系统启动时就自动运行该服务,那么需要使用setup命令,在网络服务配置的选项中,选中sshd守护进程即可。
安装启动完OpenSSH之后,用下面命令测试一下。
ssh -l [username] [address of the remote host]
如果OpenSSH工作正常,将会看到下面的提示信息:
The authenticity of host [hostname] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
在第一次登录的时候,OpenSSH将会提示用户它不知道这台登录的主机,只要键入“yes”,就会把这台登录主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。然后,SSH提示用户输入远程主机上用户账号的口令。这样,就建立了SSH连接,这之后就可以象使用telnet那样方便地使用SSH了。
SSH的密匙管理
1.生成用户自己的密匙对
用下面的命令可以生成公钥/私钥对: ssh-keygen t 类型。如果远程主机使用的是SSH 2.x就要用这个命令: ssh-keygen d。在同一台主机上同时有SSH1和SSH2的密匙是没有问题的,因为密匙是存在不同文件中的。ssh-keygen命令运行之后会显示下面的信息:
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/.username/ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/.username /.ssh/id_rsa.
Your public key has been saved in /home/.username /.ssh/id_rsa.pub.
The key fingerprint is:
38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost
Generating RSA keys:
Key generation complete.
“ssh-keygen -d”命令做的是同样的工作,但是它的一对密匙的保存路径默认情况下为: /home/[user]/.ssh/id_dsa(私人密匙)和/home/[user]/.ssh/id_dsa.pub(公用密匙)。现在用户有一对密匙了: 公用密匙要分发到所有用户想用SSH登录的远程主机上去; 私人密匙要好好地保管防止别人知道。用“ls -l ~/.ssh/identity”或“ls -l ~/.ssh/id_dsa”命令所显示的文件的访问权限必须是“-rw-------”。
如果用户怀疑自己的密匙已经被别人知道了,应当马上生成一对新的密匙。当然,这样做之后还需要重新分发一次公用密匙,才能正常使用。
2.分发公用密匙
在每一个用户需要用SSH连接的远程服务器上,都要在自己的主目录下创建一个“.ssh”的子目录,把用户的公用密匙“identity.pub”拷贝到这个目录下并把它重命名为“authorized_keys”。然后执行命令:
chmod 644 .ssh/authorized_keys
这一步是必不可少的。因为,如果除了用户之外别人对“authorized_keys”文件也有写的权限,那么如果遭到非法的破坏,SSH就不能正常工作。
如果用户想从不同的计算机登录到远程主机,“authorized_
keys”文件也可以有多个公用密匙。在这种情况下,必须在新的计算机上重新生成一对密匙,然后把生成的“identify.pub”文件拷贝并粘贴到远程主机的“authorized_keys”文件里。当然,在新的计算机上用户必须有一个账号,而且密匙是用口令保护的。有一点很重要,就是当用户取消了这个账号之后,必须记住把这一对密匙删掉。
配置SSH的客户端
在Linux客户端下使用SSH,优点是操作更方便,无须其他软件。但缺点是不太直观。用户只需要使用系统提供的默认的配置文件“/etc/ssh/ssh_config”,并且使用如下简单的命令即可登录:
//以用户test登录远程服务器www.test.com
#ssh -l test www.test.com
下面本节主要介绍配置使用Windows环境下的putty工具来登录SSH服务器。该工具目前使用得相当普遍,可以从网上免费下载。目前网上的最新版本为: putty 0.58,对该版本进行安装后,进行如下步骤的配置:
1.打开该软件,进入配置界面,软件初始自动打开Session窗口。
2.在该界面的右半区域的【Host Name(or IP address)】编辑框中输入所要远程登录的服务器地址,这里设定为: 192.168.10.1,端口编辑框中输入默认的端口号22,然后单击【Save】按钮,保存输入配置,如图1所示。
[attach]9636[/attach]
3.单击【Open】按钮,该软件连接服务器,显示连接结果,用户就可以进行相应的远程管理操作了。
配置SSH的自动登录
在上面介绍的SSH的使用过程中,用户每次登录服务器都需要输入密码,这对于用户来说未免有些麻烦。由于SSH充分使用了密钥机制,那么就可以通过一定的系统配置,而达到一次配置,以后都不用输入密码,方便登录的目的,下面以Windows的客户端为例,说明如何对SSH的自动登录进行配置。
在Windows下,使用前面介绍的客户端软件putty同样可以方便地实现自动登录,主要是使用putty工具套件自带的puttygen工具,来产生公钥/私钥对来实现,原理与Linux下相同,下面介绍一下配置细节。
1.打开puttygen工具,准备生成公钥/私钥对,如图2所示,选择生成SSH2 RSA的密钥类型。
[attach]9637[/attach]
2.单击【Generate】按钮,则进入公钥/私钥生成界面,用户需要在界面空白处不断地移动鼠标,以保证钥匙生成的随机性能。
3.成功生成公钥/私钥后,系统提示用户保存公钥/私钥对。单击【Save public key】按钮以及【Save private key】按钮,分别指定路径保存公钥以及私钥。
4.使用putty连接上服务器后,将公钥文件的内容拷贝到服务器的相应主目录下,用自己的账号登录远程系统,然后执行下面的命令。此时用记事本打开 id_rsa1.pub 文件,选中所有内容,按Ctrl+C复制到剪贴板中,然后在Putty窗口中按Shift+Ins粘贴,再按Ctrl+D键,完成文件的创建。这是完成公钥分发的过程。
使用 scp 命令
scp 命令可以用来通过安全、加密的连接在机器间传输文件。它与 rcp 相似。
把本地文件传输给远程系统的一般语法是:
scp localfile username@tohostname:/newfilename
localfile 指定源文件,username@tohostname:/newfilename 指定目标文件。
要把本地文件 shadowman 传送到你在 penguin.example.net 上的账号内,在 shell 提示下键入(把 username 替换成你的用户名):
scp shadowman [email]username@penguin.example.net[/email]:/home/username
这会把本地文件 shadowman 传输给 penguin.example.net 上的 /home/username/shadowman 文件。
把远程文件传输给本地系统的一般语法是:
scp username@tohostname:/remotefile /newlocalfile
remotefile 指定源文件,newlocalfile 指定目标文件。
源文件可以由多个文件组成。譬如,要把目录 /downloads 的内容传输到远程机器 penguin.example.net 上现存的 uploads 目录,在 shell 提示下键入下列命令:
scp /downloads/* [email]username@penguin.example.net[/email]:/uploads/
使用 sftp 命令
sftp 工具可以用来打开一次安全互动的 FTP 会话。它与 ftp 相似, 只不过,它使用安全、加密的连接。它的一般语法是:sftp [email]username@hostname.com[/email]。一旦通过 验证,你可以使用一组和使用 FTP 相似的命令。请参阅 sftp 的说明书页(man)来获取这些 命令的列表。要阅读说明书页,在 shell 提示下执行 man sftp 命令。sftp 工具只在 OpenSSH 版本 2.5.0p1 以上才有。
[/quote]
windows 下可以通过SSH Secure File Transfer Client,很方便的向Linux /Unix
传送文件,就像FTP 一样方便。
用CRT远程SSH LINUX的问题?
linux ssh安装
怎样实现MOTO375 的数据传输?
怎么配置linux 不用密码的ssh啊?
请教一个关于用SSH远程控制Linux的问题
linux下的mrtg使用
Linux下的UDP安全通信问题
如何实现笔记本电脑与台式机的数据传输?
怎样实现笔记本电脑与台式机的数据传输?
怎样实现Form间的数据传输
求援!! linux 下摄像头的使用
怎么用JAVA实现监控LINUX下CPU的使用率???
VMWARE LINUX 下怎样实现中英文输入法的转化
请问能不能在linux下使用windows下的硬盘????
linux下串口驱动如何实现?
如何在linux下实现多线程下载?
linux下如何实现输出翻页效果
linux下使用LVDS液晶显示器
linux下查看那些端口正在使用的命令是什么?
在linux下可以使用的web服务器有哪些?
在linux下如何使用一个新加的硬盘?
求linux环境下使用的应用软件,杀毒软件下载。
1、linux进程管理需要实现哪些功能?列出使用到的数据结构(结构体)
SSH与SSL的区别