02--OpenSSH1
服务器的远程管理介绍
远程管理使用两个协议,一个是早期的telnet协议,一个是现在常用的ssh协议;
首先,远程管理服务提供的普通的C/S架构的;所以,我们需要在服务端运行一个软件程序,提供给客户端做连接;
telnet协议使用 tcp/23 号端口,它追求的是软件程序小,而且传送熟读快,所以它使用简单,都是明文传输,相对于现在的互联网环境而言,不太安全;
所以,我们似乎用ssh协议来取代了telnet协议;
telnet协议
telnet协议,明文传输数据,包括用户名和密码;使用tcp/23号端口;
telnet协议在Linux下的使用方式:
yum install telnet-server
yum list all telnet*
开机启动telnet,注意,telnet的服务名称是超级守护进程--xinetd,telnet进程是属于超级守护进程中的一个;
chkconfig telnet on /etc/init.d/xinetd start
chkconfig --list
ss -tnl
远程连接服务器 23 号端口:
开启客户端的telnet功能:
iptables防火墙放行23号端口:
iptables -I INPUT -d 192.168.94.128 -p tcp --dport 23 -j ACCEPT
远程连接,如下:
再输入用户名和密码即可;
【这里需要注意的是,telnet登陆不能使用root用户直接登陆,需要去创建普通用户】
ssh协议
相对于telnet,它是一种更加安全的远程连接协议;再传输数据之前,客户端与服务器端需要先建立加密通道,才能进行数据传输;
ssh的工作原理
sshv1不太安全,所以现在默认使用sshv2版本;
1、客户端发起ssh请求
2、服务器端发送私钥和加密的数据到客户端,然后客户端使用服务器的公钥进行解密,进行服务器的确认,保证服务器的身份的可靠性;如果没有这个过程,或者没有服务器的公钥,就会提示警告;
3、客户端输入用户名和密码,传输到对端进行认证;这时候发送的用户名和密码是使用公钥进行加密了的数据;
4、最后,服务器收到用户名和密码,配对认证通过,则服务器端发送命令提示符给客户端;
除了可以使用用户名和密码登陆外,还能够使用证书来进行登陆;这种登陆方式,不需要使用用户名密码认证;这时,密钥对由客户端生成,再将公钥交给服务器,但是这个公钥是不能公开的;当客户端连接服务器端的时候,使用私钥加密数据,这时候,只要能匹配,则就能直接登陆到服务器上;
ssh的版本
v1:基于CRC-32做MAC校验的方式,不太安全,容易收到中间人攻击,所以v1版本的ssh我们现在使用较少了;
v2:双方主机协议选择安全的MAC校验方式;基于DH算法来做密钥交换,基于RSA或者DES算法来实现省份验证的;其中,DH非对称算法可以再不传输密钥的情况下,让对端算出私钥;
ssh的认证方式
ssh协议一般使用两种认证方式:一种是基于user/password的方式;另一种就是基于证书认证的方式;
下面我们再Linux上面实现这两种认证方式;我们使用的软件程序就是OpenSSH程序;
OpenSSH
OpenSSH工具是基于C/S架构的,客户端工具有:ssh,scp,sftp;服务器端:sshd服务;
客户端
客户端主配置文件为 /etc/ssh/ssh_config
ssh命令
用法:ssh [user@]host [command]
-l //指明登陆用户,和 user@ 效果一样
-p //指明登陆端口,默认额一般使用的 22 号端口;
如果是想再其他主机上运行条命令:
ssh root@192.168.94.128 'hostname'
password: //输入密码,则可以再服务器端运行hostname命令
服务器端
服务器端主配置文件为 /etc/ssh/sshd_config
vim /etc/ssh/sshd_config //查看服务器端主配置文件参数
常用参数:
port 20 //默认为20号端口,可以修改
AddressFamily any //支持ipv4或者ipv6
Listenaddress 0.0.0.0 //监听的所有端口地址
Hostkey //主机的密钥
KeyRegenerationInterval 1h //对称密钥生成的新时间
SyslogFacility AUTH //记录日志的方式
/var/log/secure //这个目录下记录了登陆成功和失败的日志信息
LoginCraceTime 2m //登陆的限制时间长度 2分钟
PermitRootLogin yes //是否容许管理员登陆
StrictModes yes //是否使用严格的检查模式
MaxAuth Tries 6 //最大的尝试次数
MaxSessions 10 //最大的会话数量
RSAAuthentication yes //RSA认证
PubkeyAuthentication yes //支持公钥认证方式
PasswordAuthentication yes //支持密码认证方式
ChallengeResponscAuthentication yes //支持挑战认证方式
Keyberos options //守护认证,第三方的统一认证架构服务
GSSAPI options //GSS的开发接口选项
X11 forwarding //支持图形的传输功能
UseDNS no //关闭DNS的反向解析
基于密钥的认证方式
需要再客户端上生成一对密钥,将这对密钥中的公钥放入到服务器端的 ssh 目录中;
1、客户端,生成密钥:
ssh-keygen -t rsa
默认回车即可;
查看生成的密钥对;
ls /root/.ssh/
其中,id_rsa是私有密钥,而id_rsa.pud为公有密钥;
也可以通过如下命令直接生成密钥对:
ssh-keygen -t rsa -P '' -f '~/.ssh/id_rsa' //这样就不用进入交互模式下
2、将公钥传递给服务器端;
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.94.128 passwd:
传输到服务器端以后,名字默认跟换为了authorized_keys;
3、测试
这时候再去访问服务器,传输命令等操作,都不需要密码了;
ssh root@192.168.94.128 'ifconfig'
命令可以正常再客户端上面运行;
scp与sftp
scp为常用命令,它用来跨主机进行数据的传输;
用法有两种:
1、pull模式:scp [option] [user@]host:/PATH/FROM/SOMEFILE /PATH/TO/SOMEWHERE
前提是客户需要有访问这个目录的权限
2、push模式:scp [option] /PATH/FROM/SOMEFILE [user@]host:/PATH/TO/SOMEWHERE
常用的option:
-r 递归复制
-p 保持源文件的属性信息
-q 静默模式
-P port 指定端口,和ssh工具使用的端口保持一致
例如:
scp root@192.168.94.128:/etc/fstab /tmp/fstab.bak scp /etc/fstab root@192.168.94.128:/tmp/
sftp命令就和普通的ftp服务器一样:
用法:sftp [user@]host
help 命令可以查看再 sftp 下的用法;【和ftp的用法相同,这里就不再赘述】