ssh secure shell

#rpm -qa|grep ssh
客户端软件涉及ssh,scp,sftp等。
服务器端配置文件是/etc/ssh/sshd_config
客户端配置文件是/etc/ssh/ssh_config
 

 

在客户端执行

#ssh 用户名@192.168.1.1    //使用192.168.1.1某一指定的用户名和系统密码登陆

系统默认是不允许以root用户远程的,如果想使root可以登录,要将/etc/ssh/sshd_config文件中的PermitRootLogin no中的“no”改为“yes”,然后重新启动ssh服务

 

密钥

   密钥是一个数字证书,它是用来声明“这就是我,真的是我,我发誓”。借助于加密的功劳,SSH客户端可以向服务器证明自己的密钥是真实的。

SSH证书使用一对密钥:一个私钥,一个公钥。

   私钥只保存你独有的一些秘密信息。SSH客户端用其向服务器证明自己的身份。公钥是公开的,可以随便将其放入SSH服务器上的自己的账号中,在认证时,SSH客户端和服务器要进行一次有关私钥和公钥的 协商。

如果私钥和公钥可以匹配,那么身份就得到了证明,认证就成功了。

 

在客户端执行
#ssh-keygen -t rsa(不输入密码,这样使用ssh登录时不需要输入密码就可以登录,如果输入了密码那么登录时也要求输入相同的密码)

把生成的公钥拷贝到ssh服务器上
#scp /root/.ssh/id_rsa.pub 192.168.1.1:/root

并在服务器上执行
#cat id_rsa.pub>>/root/.ssh/authorized_keys  //将公钥的内容追加到授权文件authorized_keys中

再次ssh时就不用密码了,因为服务器上有客户端的公钥,客户端的私钥与在服务器上公钥能匹配

如果想以服务器的普通用户test验证登录,则要将公钥id_rsa.pub同样追加到服务器的/home/test/.ssh中即test用户的家目录的.ssh目录下的授权文件中

#cat id_rsa.pub>>/home/test/.ssh/authorized_keys
注:用户家目录下.ssh目录权限为755,authorized_keys文件的权限为644,且他们的所有者和所有者组都为root

 

 

 协商过程:

1.客户端说“嗨!服务器,我想通过SSH连接到你系统中用户test的账号上。”

2.服务器说:“好吧,也许你可以。首先你得接受一个提问,向我证明你的身份!”

3客户端说:“我接受你的提问,这是我的身份证明,是用我的私钥对你的提问进行数学计算后生成的”。这种对服务器的响应称为认证者。

4.服务器说:“多谢你的认证,现在我要检查一下test账号来确定你能不能进来”。

 

   通常,服务器要对test的公钥进行检查,来确认认证者是否与其匹配(匹配是另一次的加密操作),如果可以,服务器就说:“好,进来吧,否则,认证就失败了。

 

在可以使用密钥认证之前,要先进行一些设置:

1.需要一个公钥和一个私钥,合起来称为一个密钥对,还需要使用一个口令来保护自己的私钥。

 

2.需要在SSH服务器上安装自己的公钥。

 

私钥:
   负责在向外发出的SSH连接中证实用户的身份。当用户运行一个SSH客户端(如scp,ssh )通过一个服务器上的用户访问服务器时,程序向SSH服务器请求建立连接,然后客户端就使用这个用户私钥向服务器证实用户的身份。
注:(私钥应该放在安全的地方,否则,入侵者要是得到了你的私钥,就可以轻松访问你的账号了。)
 

公钥:
  在到达你账号的连接中标识你的身份。SSH客户端请求访问你的账号时,会用一个私钥作为其身份的标识,SSH服务器将检查相应的公钥,如果根据某种加密测试,两个密钥是“匹配”的,那么认证就通过了,将继续连接,公钥不必保密,攻击者不能使用公钥攻破一个账号。

 

SSH身份标识

   SSH密钥对分别保存在名字相关的两个文件中(即:私钥文件名字后面加上.pub就是公钥文件名)。

   一个SSH身份标识不是单独一个密钥,而是一组密钥,SSH客户端请求认证时,可能用到这一组密钥中所有的密钥。如果用第一个密钥认证失败,SSH客户端自动试用第二个,依次类推,直至认证成功或全部失败为止。

使用#sftp 192.168.1.1将不需要在192.168.1.1上开启ftp服务了,它可以实现和ftp相同的功能。

 

本地转发

SSH的端口转发:SSH能为另外一个应用程序的数据流提供透明的加密措施,称为端口转发。
转发是一种与其它网络应用程序交互的方式。在SSH连接的一端,SSH截获其他程序的服务请求,将其通过加密的SSH连接发送,传送给另一端的适当服务接受者。
 

本地转发:例子,远程主机上运行WEB服务。我们在家里机器的WEB浏览器上访问远程主机的WEB页。现在我们要使用SSH来保护此WEB连接
在我的客户端机器上使用命令
$ssh -g -L 9898:192.168.1.210:80 192.168.1.210
-L表明是本地转发。此时tcp客户端(即这里的WEB浏览器)和SSH客户端位于同一台主机上
后面三个值由冒号隔开,分别表示:需要监听本地端口是9898;192.168.1.210即远程WEB服务器地址;80表示远程的转发目标端口号。
192.168.1.210:远程SSH主机的IP,由于WEB服务器与SSH服务器是同一台机器所以IP一致
-g(Gatewayports):开启网关端口,即任意一台机器都可以通过我的机器来访问那台WEB服务器。
退出SSH登录则停止转发
 现在数据是这样传输的:
1.家里机器的WEB浏览器向本地端口9898发送数据,而不向远程WEB服务器的80端口发送数据。
2.家里主机上的SSH客户端读9898端口;加密数据,将其通过SSH连接到运行WEB服务的SSH服务器。
3.WEB服务器上的SSH服务器给数据解密,然后将其传给WEB服务器上的80端口。
4.使用相反的步骤将数据从WEB服务器把数据传给家里的机器。

 实验环境:ssh客户端和web客户端在同一台主机上,ip为192.168.1.110,ssh服务器和web服务器在同一台机器上,ip为192.168.1.210

除了输入以上命令外还可以修改ssh的客户端配置文件来达到以上功能:
vi /etc/ssh/ssh_config,添加以下行
Host 192.168.1.210(ssh服务器的ip)
LocalForward 9898 192.168.1.210:80(web服务器的ip及端口)
Gatewayports=yes(缺省是关的)
此时重新连接到ssh服务器
使用#ssh 192.168.1.210即可,在命令行不必使用-g和-L
测试:在任意机器的web浏览器的地址栏输入http://192.168.1.110:9898,即可浏览到192.168.1.210上的web页面,如果不开启网关端口那么只能在本地机器输入http://localhost:9898才能看到web页面

 运行远程SSH服务器的某个X程序:

1.首先打开客户端的X转发功能,即编辑客户端/etc/ssh/ssh_config配置文件,设置ForwardX11 yes(默认已经开启)
2.在shell下输入:
ssh –f 192.168.1.210 /usr/X11R6/bin/xterm


远程转发
Tcp客户端在远程,服务器在本地,转发连接由远程机器发起。例如:本地主机是WEB服务器,并且是ssh的客户端(ip为192.168.1.110),远程主机是WEB客户端即浏览器,并且是ssh服务器(ip为192.168.1.210) 。
在本地输入:
#ssh –R 2008:192.168.1.110:80 192.168.1.210
-R:表示远程转发
2008表示要转发的远程主机端口,即192.168.1.210这台
WEB客户端浏览器的端口
80表示本地WEB服务器的端口
测试:
在WEB客户端(192.168.1.210)浏览器的地址栏输入:http://localhost:2008相当于登陆到WEB服务器(192.168.1.110)的80端口。
 在ssh的客户端修改客户端的配置文件:
添加
Host  192.168.1.210(远程ssh服务器的ip)
RemoteForward 2008 localhost:80
重新连接ssh服务器时不用使用-R选项,直接输入ssh 192.168.1.210即可

 ssh服务器端配置

/etc/ssh/sshd_config
禁止使用系统密码认证,因为使用密码认证不安全
PasswordAuthentication  no重启服务生效
帐户访问控制:AllowUsers
例如:AllowUser test 表示只允许test接受连接
DenyUsers test1 test2禁止test1和test2帐号接受连接

 组访问控制:

AllowGroups group1
DenyGroups group1 group2
Deny的优先级大于Allow的优先级
启用root账号连接ssh,确实是禁止的
PermitRootLogin  yes即可
 

你可能感兴趣的:(shell)