Linux ssh服务(一)

1. SSH服务
1.1 SSH简介
  SSH(secure shell protocol):默认端口22,在进行数据传输之前,ssh先对联机数据包用加密技术进行加密管理,加密后才进行数据的传输,保障数据的安全性。
  [telnet 默认端口为23,非加密的形式明文传输,数据不安全]
  默认状态下,SSH服务提供两个服务功能,一个是提供类似telnet远程联机服务器的服务,即上面提到的SSH服务;另一个时类似FTP服务的sftp-server,借助ssh 协议来传输数据,提供更安全SFTP服务。

1.2 SSH结构:服务端与客户端
  SSH服务由服务端软件OpenSSH和客户端(常见的有SSH,CRT,XSHELL,PUTTY)组成,SSH服务默认使用22端口提供服务,它有两个不兼容的SSH协议版本:1.x和2.x。
  OpenSSH同时支持SSH1.x和2.x,用SSH2.X的客户端程序不能链接到SSH1.X的程序服务商。
  SSH服务端是一个守护进程(demon),他在后台运行并相应来自客户端的连接请求。
  SSH服务端的进程名为sshd,负责实时监听远程SSH客户端的链接请求,并进行处理,一般包括公共密钥认证、密钥交换,对称密钥加密和非安全连接等。

1.3 SSH的工作机制:
  本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。

1.4 SSH加密技术:
  网络上的数据包加密技术一般是通过所谓的一对公钥和私钥组合成的密钥对进行加密与解密操作。
  SSH2 同时支持RSA和DSA密钥,但是SSH1仅支持RSA密钥。
  服务端是公钥,768bit;客户端是私钥,256bit,公私密钥合成一个密钥进行通信。

#公钥的大小设置
[root@NFS-B ~]# grep ServerKey /etc/ssh/sshd_config 
#ServerKeyBits 768

在SSH1.x的联机过程中,当server接收client端的私钥后就不再进行验证了(不安全,当在密钥传输过程中被篡改)。
在SSH2.x就使用Diffie-Hllman机制,每次传输都会验证密钥的正确性。

1.5 SSH服务认证类型
  从客户端来看,ssh服务主要提供两种级别的安全验证
  1.基于口令的安全验证
  只要知道服务器的账号密码(当然也知道服务的IP和端口,默认22),就可以通过ssh连接登陆到远程主机,此时联机过程中所有的传输数据都是加密的。
  2.基于密钥的安全验证
  基于密钥的安全验证方式是指,需要依靠密钥,也就是必须事先建立一对密钥对,然后把公用密钥放在需要访问的目标服务器上,另外还需要把私有密钥放到SSH客户 端或者对应的客户端服务器上。

1.6 SSH 实战应用
  1.检查是否安装OPNSSH,若没有安装需要自行安装(rpm、yum等方式)

[root@Center-A ~]# rpm -qa |grep openssh
[root@Center-A ~]# rpm -qa open*
openldap-2.3.43-25.el5
openssl-devel-0.9.8e-22.el5
openssh-clients-4.3p2-82.el5
openssl-0.9.8e-22.el5
openldap-devel-2.3.43-25.el5
openjade-1.3.2-27
opensp-1.5.2-4
openssh-askpass-4.3p2-82.el5
openssh-4.3p2-82.el5
openssh-server-4.3p2-82.el5
[root@Center-A ~]# ssh
ssh          ssh-add      ssh-agent    ssh-copy-id  sshd         ssh-keygen   ssh-keyscan

  2.启动SSH服务

[root@Center-A ~]# /etc/init.d/sshd start
Starting sshd:                                             [  OK  ]
#查看服务对应的端口号 [root@Center
-A ~]# netstat -lntup |grep ssh tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 26704/sshd
#查看端口是被哪些服务占用 [root@Center
-A ~]# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 2533 root 3u IPv4 7596 0t0 TCP Center-A:ssh->10.0.0.1:50296 (ESTABLISHED) sshd 26704 root 3u IPv4 40229 0t0 TCP *:ssh (LISTEN)

  3.远程连接SSH

格式: ssh -p端口 用户@IP
[root@Center-A ~]# ifconfig eth0| sed -n '2p' |awk -F '[ :]+'  '{print $4}'
10.0.0.56
[root@Center-A ~]# ssh -p22 root@10.0.0.57
The authenticity of host '10.0.0.57 (10.0.0.57)' can't be established.
RSA key fingerprint is 62:d2:ea:c0:0e:d7:f2:60:2d:6f:c7:6f:cd:73:30:ae.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.57' (RSA) to the list of known hosts.
root@10.0.0.57's password: 
Last login: Wed May 22 04:41:28 2013 from 10.0.0.1
[root@Client-B ~]# ifconfig eth0| sed -n '2p' |awk -F '[ :]+'  '{print $4}'
10.0.0.57

#SSH会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts,若没有会出现确认信息。
[root@Center-A ~]# ls .ssh/
known_hosts
[root@Center-A ~]# cat .ssh/known_hosts 
10.0.0.57 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAtXWcxhyfWML19kWKVLaFriVlomoUIlqCwq3RkAsYlYbzkHfrX+sFX7DGkecfFUIECqu1xI0bN5CMkqeI6bUhi5VPcJ0TnYL+ikIng3dArJx/UDiRxxN4eJWbC/FxYeQdrp2pfIicat/4NAzmh0lnjmJnJCuvBSlCXHM4ptSbIvmMN6dHPrTLPDZWUGl2eyLOWHAsTUmyjMZGzCoD9XbOB0cqqDlIQukXSQkKhIvUZ4FEu0FvbOf3J7YCb3ciEuRDAB2UMn/WmgSN4GFmLhxkTYADm20MGxeNpCeybxfj+gH9Tw7AaOUC/Mylp2iNHAiHOe9N0SHK679LfQw5tzz5Pw==

#退出SSH远程连接
[root@Client-B ~]# exit
logout
Connection to 10.0.0.57 closed.

2. SSH附带的远程拷贝 scp命令

格式:scp -P22 filename user@ip:/dirname
-P 端口   -p 保持属性  -r 递归,拷贝目录

环境:
[root@Center-A ~]# ifconfig eth0| sed -n '2p' |awk -F '[ :]+'  '{print $4}' 
10.0.0.56
[root@Center-A ~]# ll
total 64
-rw------- 1 root root   957 May 21 04:57 anaconda-ks.cfg
-rw-r--r-- 1 root root  3627 May 21 05:04 init.sh
-rw-r--r-- 1 root root 31548 May 21 04:57 install.log
-rw-r--r-- 1 root root  4532 May 21 04:56 install.log.syslog

[root@Client-B ~]# ifconfig eth0| sed -n '2p' |awk -F '[ :]+'  '{print $4}'
10.0.0.57
[root@Client-B ~]# ll
total 60
-rw------- 1 root root   957 May 21 04:57 anaconda-ks.cfg
-rw-r--r-- 1 root root 31548 May 21 04:57 install.log
-rw-r--r-- 1 root root  4532 May 21 04:56 install.log.syslog

[测试1]
将58上的init.sh拷贝至57的root家目录内
[root@Center-A ~]# scp -P22 init.sh root@10.0.0.57:~
root@10.0.0.57's password: 
init.sh                                                                              100% 3627     3.5KB/s   00:00  
[root@Client
-B ~]# ll total 60 -rw------- 1 root root 957 May 21 04:57 anaconda-ks.cfg -rw-r--r-- 1 root root 3627 May 22 06:06 init.sh -rw-r--r-- 1 root root 31548 May 21 04:57 install.log -rw-r--r-- 1 root root 4532 May 21 04:56 install.log.syslog [测试2] 将57上的1.txt拷贝到本机(56)的家目录内 #57上建立新文件1.txt [root@Client-B ~]# ls anaconda-ks.cfg init.sh install.log install.log.syslog [root@Client-B ~]# touch 1.txt [root@Client-B ~]# ll total 60 -rw-r--r-- 1 root root 0 May 22 06:42 1.txt -rw------- 1 root root 957 May 21 04:57 anaconda-ks.cfg -rw-r--r-- 1 root root 3627 May 22 06:06 init.sh -rw-r--r-- 1 root root 31548 May 21 04:57 install.log -rw-r--r-- 1 root root 4532 May 21 04:56 install.log.syslog [root@Center-A ~]# ll total 64 -rw------- 1 root root 957 May 21 04:57 anaconda-ks.cfg -rw-r--r-- 1 root root 3627 May 21 05:04 init.sh -rw-r--r-- 1 root root 31548 May 21 04:57 install.log -rw-r--r-- 1 root root 4532 May 21 04:56 install.log.syslog
#执行 scp
-P22 10.0.0.57:~/1.txt ~ ,将57上的1.txt拷贝到自己本地的家目录内 [root@Center-A ~]# scp -P22 10.0.0.57:~/1.txt ~ root@10.0.0.57's password: 1.txt 100% 0 0.0KB/s 00:00 [root@Center-A ~]# ll total 64 -rw-r--r-- 1 root root 0 May 22 06:44 1.txt -rw------- 1 root root 957 May 21 04:57 anaconda-ks.cfg -rw-r--r-- 1 root root 3627 May 21 05:04 init.sh -rw-r--r-- 1 root root 31548 May 21 04:57 install.log -rw-r--r-- 1 root root 4532 May 21 04:56 install.log.syslog

3. 通过SSH远程连接执行命令   

格式:ssh -p端口 用户@IP Command  (基于口令的安全验证)
[root@Center-A ~]# ssh -p22 root@10.0.0.57 uptime
root@10.0.0.57's password: 
 05:57:00 up  1:16,  1 user,  load average: 0.00, 0.00, 0.00
[root@Center-A ~]# ssh -p22 root@10.0.0.57 /sbin/ifconfig
root@10.0.0.57's password: 

[root@Center-A ~]# ssh -p22 root@10.0.0.57 /sbin/ifconfig eth0
root@10.0.0.57's password: 
eth0      Link encap:Ethernet  HWaddr 00:50:56:3F:72:61  
          inet addr:10.0.0.57  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:615 errors:0 dropped:0 overruns:0 frame:0
          TX packets:370 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:62764 (61.2 KiB)  TX bytes:43900 (42.8 KiB)
          Interrupt:67 Base address:0x2000 

4. SSH服务附带的sftp功能服务(暂忽略)

posted @ 2013-08-14 21:38  木子吾雨  阅读(297)  评论(0)    收藏  举报