linux常用命令——SSH

转自:http://www.linuxfly.org/post/29/

 大家常常都会用到ssh远程登陆linux服务器,但其实ssh可以提供的功能不单如此,还可以实现如文件传输,加密转发等功能。这里就介绍一下:
※系统:红旗DC Server 4.1
1、ssh简介
 传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。
 SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。
最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。
 SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
 SSH的安全验证是如何工作的
 从客户端来看,SSH提供两种级别的安全验证。
 第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
 第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
 用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
 第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。

2、基础
 红旗DC Server 4.1默认已经安装好OpenSSH:

#rpm -qa|grep ssh
openssh-askpass-3.6.1p2-33.30.1.1AX
openssh-clients-3.6.1p2-33.30.1.1AX
openssh-3.6.1p2-33.30.1.1AX
openssh-askpass-gnome-3.6.1p2-33.30.1.1AX
openssh-server-3.6.1p2-33.30.1.1AX

 当然,我们也可以通过从 http://www.openssh.com/ 下载,安装。

3、登陆
 使用ssh登陆linux服务器是我们用得最多的,默认在系统安装完毕后就已经有提供ssh服务。不过,这个时候root管理员是受限制的,可以修改/etc/ssh/sshd_config:
引用
PermitRootLogin no

改为:
引用
PermitRootLogin yes

 然后重新启动sshd服务即可。
service sshd restart

 要使用ssh登陆的机器,必须安装有ssh的客户端,红旗桌面和服务器产品是已经自带的,Windows平台推荐使用 putty
 登陆的方式非常简单:
#ssh -l 远程用户名 远程IP或机器名 [-p port]

 [-p port]用于指定远端服务器的端口,默认22就不用输入了。
 接下来会提示是否接受key认证,确认后,输入密码即可。
引用
The authenticity of host printserver.linuxfly.com (192.168.228.153) cannot be established.
RSA key fingerprint is ed:61:e2:ce:40:00:ca:06:93:e8:a4:c2:3a:37:1e:9c.
Are you sure you want to continue connecting (yes/no)?

 除此以外,还可以使用:
#ssh 远程用户名@远程IP或机器名 [-p port]

 意思是一样的。
(其中,如果要登陆的用户和远端登陆的用户一致,可以不用指定)

4、拷贝数据
 要使用ssh协议拷贝数据,可以使用scp或sftp命令
#scp [-r] [-C] 本地文件 远程用户名@远程IP或机器名

[-r]表示连子目录拷贝
[-C]表示使用压缩方式
#sftp 远程用户名@远程IP或机器名

 sftp使用的端口是22,而不是普通FTP的21端口。但登陆后,可以使用ftp的命令进行本地和远程文件之间的相互操作。在Windows平台下,还可以使用F-Secure File Transfer工具在图形界面上进行。相当的方便。

5、远程执行命令
#ssh -l 远程用户名 远程IP或机器名 需要执行的命令

 其实就是多了最后一个参数,它表示在远端计算机上执行的命令。使用这种方式可以减少退出的步骤。

6、建立相互信任关系
 前面的方法,在登陆的时候必须每次都输入密码,有时候这样会引起麻烦(例如在Oracle RAC上)。由于ssh采用的是公钥和私钥的方式,所以可以通过共享公钥的方式达到此目的。
本地上运行:
#ssh-keygen -t rsa

 接下来按回车即可,当看到Enter passphrase的时候,不要输入字符,直接回车。(如果输入passphrase,就需要使用ssh-agent了)
然后你会发现在~/.ssh下有两个新文件: id_rsa和id_rsa.pub,把id_rsa.pub加入到远端机器的~/.ssh/authorized_keys的文件末尾即可。
 假设要做的是root用户,则:
#cat id_rsa.pub | ssh 远程IP "cat >> /root/.ssh/authorized_keys"

 今后就可以使用ssh登陆远端机器了。包括scp和sftp都可以。

7、简化远端服务器名字
 有时候,我们需要登陆的机器名字很长,可以修改~/.ssh/config文件:
引用

Host shortname
HostName veryverylonglonglongname.linuxfly.com
Port 22

 这样就可以直接使用ssh shortname登陆即可。

8、端口转发
 这个功能可能平时用得不多,但一旦用起来,将是非常方便的。
 ssh端口转发可以实现通过ssh服务器,把发来本地端口的数据转发到另外一台服务器的端口上,这台服务器通常是内网的服务器。
 例如我们要实现:
引用
local client -->remote ssh server:2000-->172.16.81.88:80

#ssh [user@remote host] -L 2000:172.16.81.88:80

 保证上面的ssh进程不要退出的情况下,就可以使用
http://localhost:2000/

 访问到内网的real server服务器了。
 同样的,可以修改/root/.ssh/config文件,添加:
引用
LocalForward 2000 172.16.81.88:80

 保存后,使用:
#ssh [user@remote host]

 保持进程不退出,即可。

9、附录
参考文档:
SSH基础
SSH安装相关
SSH使用指南




转自:http://www.linuxfly.org/post/175/

putty使用密钥登陆OpenSSH

在Windows管理Linux服务器时,常使用putty登陆ssh进行远程管理。默认登陆验证方式为密码认证,该方式虽然简单,但每次登陆都要输入一长串的密码,相当麻烦。而且,如果万一把root允许登陆打开,还有可能被强力破解,导致严重的后果。
    所以,通常建议用密钥登陆验证代替密码方式,即简单,又可靠。
一、为什么建议使用密钥登陆
通常现在的Linux发行版都使用OpenSSH代替telnet、rsh等明文传输的终端服务。
以红旗 DC Server 5.0为例:

引用
# rpm -qa|grep -E -w 'openssh'
openssh-clients-4.0p1-1.2AX
openssh-server-4.0p1-1.2AX
openssh-4.0p1-1.2AX

而OpenSSH默认是同时支持密码和密钥两种认证方式的。转一个说明:

为什么要使用公钥认证
通常,通过ssh登录远程服务器时,使用密码认证,分别输入用户名和密码,两者满足一定规则就可以登录。但是密码认证有以下的缺点:
引用
a)用户无法设置空密码(即使系统允许空密码,也会十分危险) 
b)密码容易被人偷窥或猜到 
c)服务器上的一个帐户若要给多人使用,则必须让所有使用者都知道密码,导致密码容易泄露,而且修改密码时必须通知所有人

而使用公钥认证则可以解决上述问题。
引用
a)公钥认证允许使用空密码,省去每次登录都需要输入密码的麻烦 
b)多个使用者可以通过各自的密钥登录到系统上的同一个用户
c)即使修改了对应用户的密码,也不会影响登陆
d)若同时禁用密码认证,则只要保证私钥的安全,不会受到暴力破解的威胁

二、使用putty生成密钥和登陆
根据公钥认证的原理(见后面说明),认证双方任何一方都可制作该钥匙对,并且只要认证方有被认证方的公钥信息,即可匹配成功。
这里,我们先以Windows上的putty登陆Linux服务器为例说明。所以,该密钥对由putty制作。
继续前,请确保您已经把整个putty包都下载完:
官方网站: 点击
最新版本:0.60,我截图的版本是0.55的。
本地下载:
其中包括:PuTTY、Puttygen、PSCP、Plink、Pagent 等工具。
1、使用puttygen制作密钥
启动puttygen工具,为兼容OpenSSH密钥,选择 “SSH2 RSA”
点击在新窗口中浏览此图片
单击 Generate 按钮,并使用鼠标在“key”框内移动,以获得足够的随机数据供生成密钥使用:
点击在新窗口中浏览此图片
※期间,你会看到进度条上面有个提示 “Please generate some radomness by moving the mouse over the blank area.” ,意思就是让你用鼠标在空白区域随机移动。随着鼠标在空白区域的移动,进度条会一直走下去。停止移动鼠标,进度条也就停止了。所以,那我们要移动鼠标,直到进度条走满为止。
完成后的窗口如下:
点击在新窗口中浏览此图片
其中:
引用
Key comment:是注释,不会影响密钥的有效性,但可作为自己用于区别其他密钥的参考;
Key passphrase 和 Confirm passphrase :用于保护私钥,如果不输入该信息,那么任何人只要拿到该私钥,即可无密码登陆系统, 非常危险;通常情况下,我是建议大家输入的,但这里为了方便说明,暂时留空,请看后面使用的说明。

随后,点击“Save private key”保留私钥。
如果没有输入Key passphrase信息,会有警告:
点击在新窗口中浏览此图片
输入私钥的文件名:
点击在新窗口中浏览此图片
※公钥信息可以不用保留在本地的,puttygen可以从私钥得到它,验证时也不会用到。

2、修改openssh配置
修改/etc/ssh/sshd_config:
引用
ChallengeResponseAuthentication no  #关闭挑战应答方式
UsePAM no  #不使用PAM认证

然后重启sshd服务,原因见: 这里

3、拷贝公钥信息
上面密钥信息窗口的“Key”框最后生成的就是公钥信息:
点击在新窗口中浏览此图片
需要把该信息拷贝到Linux服务器的特定文件中: ~/.ssh/authorized_keys
其中,“~”表示对应用户的主目录,以root为例。
若.ssh目录不存在,请创建它,并把公钥信息写入文件中:
# mkdir ~/.ssh
# chmod 700 ~/.ssh
# vi ~/.ssh/authorized_keys
# chmod 644 ~/.ssh/authorized_keys

※请务必留意:文件和目录的权限问题,用户必须是将要进行认证的用户,而权限必须是0644,也就是禁止其他人对该文件写入信息。(否则,某些有心人把自己的公钥写入这里,他也可以无密码进来了)
因为,通常umask是0022或0002的,所以请使用chown和chmod修改为对应的权限咯。


4、使用putty使用密钥登陆
对putty进行一些简单配置,即可使用密钥登陆Linux服务器。
选择Connection-SSH-Auth,在“Private key file for authentication”输入密钥的路径:
点击在新窗口中浏览此图片
然后在Connection的“Auth-login username”输入登陆的用户名,例如root:
点击在新窗口中浏览此图片
◎Putty 0.60 版本在Connection-Data页内。
然后点击Open即可:
点击在新窗口中浏览此图片
若一切正常,则可以在session中Save保存配置。

三、使用OpenSSH生成密钥
密钥既可使用putty生成,也可用OpenSSH生成。
1、Linux下生成密钥
运行:
引用
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  <-密钥路径
Enter passphrase (empty for no passphrase): <-密钥保护密码
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa. <-私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <-公钥
The key fingerprint is:
17:28:4c:c3:e4:18:d4:c2:31:bd:be:a7:a9:d4:a8:48 root@mail.linuxfly.org

2、把公钥信息写入authorized_keys文件中
运行:
# cd ~/.ssh
# cat id_rsa.pub >> authorized_keys


3、生成putty的私钥
由于SSH的标准中,并没有固定密钥文件的格式。而Putty使用的私钥格式和OpenSSH生成的有点不同,需要转换一下。
a)把id_rsa传到Windows机器上
b)使用puttygen的“Load”读取id_rsa文件
点击在新窗口中浏览此图片
这里也可以从图中的公钥信息,与id_rsa.pub对比一下,应该是一致的。
c)点击“Save private key”保留私钥。
d)putty使用该新的私钥登陆服务器即可。
内文分页: [1]  [2]


转自:http://www.linuxfly.org/post/191/

之前写过[原]putty使用密钥登陆OpenSSH 的文章,极大地方便了我从Windows对linux系统的远程管理。基于同样的原理,我们也希望在linux环境下拥有同样的便利性。

一、转换密钥
如果密钥是由OpenSSH生成的,则非常方便,可以直接看第二节的内容。但如果密钥是由putty的puttygen制作的,则在使用前需要转换。
打开puttygen后,导入现在的密钥(.ppk),并根据实际情况输入key passphrase:
点击在新窗口中浏览此图片
若OpenSSH服务端仍未设置公钥,请把Public Key部分保存下来备用:
点击在新窗口中浏览此图片
然后选择菜单Conversions-Export OpenSSH Key:
点击在新窗口中浏览此图片
保存为id_rsa即可:
点击在新窗口中浏览此图片

二、使用密钥登陆
1、拷贝私钥
通过ftp等方式,把上面生成的id_rsa私钥放入~/.ssh/中,并修改为对应的权限:

# lftp 192.168.228.244
# cd /root/.ssh
# mv ../id_rsa ./
# chmod 600 id_rsa

2、拷贝公钥
如果OpenSSH服务端未设置公钥,请执行:
$ cd ~/.ssh
$ vi authorized_keys

把上面记录的Public Key拷贝到authorized_keys中,保存即可。

3、无key passphrase
如果密钥没有设置key passphrase,可直接登陆。
# ssh rfuser@www.linuxfly.cn
Last login: Mon Dec 17 10:16:43 2007 from 192.168.228.250

4、使用ssh-agent登陆
如果密钥设置了key passphrase,则需要先启动ssh-agent,使用ssh-add,并输入passphrase:
# ssh-agent $SHELL
# ssh-add id_rsa
Enter passphrase for id_rsa:
Identity added: id_rsa (id_rsa)
# ssh rfuser@www.linuxfly.cn
Last login: Mon Dec 17 10:16:43 2007 from 192.168.228.250







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值