linux远程登录(Telnet、SSH)
系统:RHEL 5.5 64位,使用CentOS的yum源并作更新处理
参考书目《Linux兵书》/电子工业出版社/刘丽霞,细节之处稍有变动。
一、Telnet(远程登录推荐SSH)
1、安装、启动Telnet
1.1、安装和启动一般需要两个包:
telnet-client提供客户端程序
telnet-server提供服务器端程序
1.2、安装之前,确定是否已经安装Telnet
[root@localhost Server]# rpm -qa|grep telnet
telnet-server-0.17-39.el5
telnet-0.17-39.el5
说明已经安装,若未安装,可挂载RHEL5.5的DVD光盘镜像,在Server文件夹下找到并安装下面三个包:
[root@localhost Server]# rpm -ivh xinetd-2.3.14-10.el5.x86_64.rpm #先安装这个包
[root@localhost Server]# rpm -ivh telnet-
telnet-0.17-39.el5.x86_64.rpm telnet-server-0.17-39.el5.x86_64.rpm #这两个包的安装顺序是从左到右依次安装
1.3、启动:
方法一:
用# setup命令,选择系统服务,在里面找到Telnet,用空格键选中(前面加*),然后用Tab键选择确定,退出。
方法二:xinetd启动
# vim /etc/xinetd.d/telnet
修改后文件如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# default: on # description: The telnet server serves telnet sessions; it uses \ # unencrypted username/password pairs for authentication. service telnet { #disable = no 这里将no改为yes disable = yes flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID }
重启服务
[root@localhost Server]# service xinetd restart #这种方式在这里有问题哈。。。。。 bash: service: command not found [root@localhost Server]# /etc/init.d/xinetd restart #用这个吧 停止 xinetd: [失败] 启动 xinetd: [确定]
2、配置Telnet
2.1、设置端口
# vim /etc/services ,修改默认23端口为未使用的端口号,如22182:
telnet 22183/tcp telnet 22183/udp
[root@localhost Server]# /etc/init.d/xinetd restart #重启服务
2.2、Telnet服务限制
Telnet用明文传送口令和数据,有时有必要对其服务范围进行限制
# vim /etc/xinetd.d/telnet修改文件如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# default: on # description: The telnet server serves telnet sessions; it uses \ # unencrypted username/password pairs for authentication. service telnet { disable = no #disable = yes flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID bind =192.168.111.23 #主机地址 only_from =192.168.0.0/16 #只允许192.168.0.0-192.168.255.255网段之间的计算机登录 #only_from = .edu.cn #只允许教育网接入 #no_access =210.45.160.{115,116} #这两个IP地址不可用 #access_times =7:00-12:00 15:00-23:00 #每天这两个时间段开放服务 }
2.3、Telnet的root用户登录
Telnet默认不允许root登录,若要root登录,方法如下:
方法一:
# vim /etc/pam.d/login
找到下面一行,注释掉:
#account required pam_nologin.so 将这一行加上注释
方法二:
# mv /etc/securetty /etc/securetty_bankup
注意:非特殊情况,请勿这样操作
3、Telnet的会话示例:
登陆命令(只须提供登陆的主机名和用户):
telnet [-l user ] [-a] host-name [port]
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
[root@localhost Server]# telnet 127.0.0.1 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. Red Hat Enterprise Linux Server release 5.5 (Tikanga) Kernel 2.6.18-194.el5 on an x86_64 login: vnc Password: Last login: Wed May 6 17:59:20 on :0 [vnc@localhost ~]$ su 口令: [root@localhost vnc]# exit exit [vnc@localhost ~]$ exit logout Connection closed by foreign host. [root@localhost Server]#
注意:需要关闭防火墙,或直接打开22183端口,
(参考文档:http://blog.sina.com.cn/s/blog_866c5a5d0101ckr1.html)
# vim /etc/sysconfig/iptables
添加下面一行代码:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22183 -j ACCEPT
用Xshell打开截图如下:
二、SSH
SSH优点:传输的数据经过加密,有效防止“中间人”攻击、DNS和IP欺骗;传输数据经过压缩,传输速度快。
SSH有很多功能,既可代替Telnet,又可为FTP、POP、甚至PPP提供安全通道
注意:有两个不兼容的版本1.x和2.x;
OpenSSH是SSH的免费替代软件,应用较广泛;
若准备使用SSH,一定要应用到所有服务器上,如9台安全的服务器和一台不安全的服务器配在一起是没安全性可言的。
1、安装启动SSH
1.1、查看有无安装SSH
[root@localhost Server]# rpm -qa|grep ssh openssh-4.3p2-41.el5 openssh-server-4.3p2-41.el5 openssh-clients-4.3p2-41.el5 openssh-askpass-4.3p2-41.el5
如无安装,挂载系统镜像,安装下列软件:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
[root@localhost Server]# rpm -ivh openssh- openssh-4.3p2-41.el5.x86_64.rpm openssh-clients-4.3p2-41.el5.x86_64.rpm openssh-askpass-4.3p2-41.el5.x86_64.rpm openssh-server-4.3p2-41.el5.x86_64.rpm
1.2、启动
三种方式:
# service sshd start 方法一 启动 sshd: [确定] # /etc/rc.d/init.d/sshd restart 方法二 停止 sshd: [确定] 启动 sshd: [确定]
方法三(开机启动):
#setup,在系统服务中找到sshd,前面加上*,确定,退出即可
2、简单测试使用SSH
测试SSH提供的安全登录功能:
ssh -l [your accountname on the remote host] [address of the remote host]
例子:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# ssh -l root 127.0.0.1 The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established. RSA key fingerprint is 76:b3:02:d2:35:18:60:e6:c7:99:a3:01:08:fa:24:85. Are you sure you want to continue connecting (yes/no)? ye Please type 'yes' or 'no': yes Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts. root@127.0.0.1's password: [root@localhost ~]# who vnc :0 2015-05-06 17:59 vnc pts/1 2015-05-06 17:59 (:0.0) root pts/2 2015-05-06 20:08 (localhost.localdomain) [root@localhost ~]# who am i root pts/2 2015-05-06 20:08 (localhost.localdomain) [root@localhost ~]#
3、两个配置文件
/etc/ssh/ssh_config 为OpenSSH系统范围内的配置文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 [root@localhost ~]# cat /etc/ssh/ssh_config 2 # $OpenBSD: ssh_config,v 1.21 2005/12/06 22:38:27 reyk Exp $ 3 4 省略。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 5 # Host * #只对能够匹配后面字符串的计算机有效,*代表所有主机 6 # ForwardAgent no 7 # ForwardX11 no 8 # RhostsRSAAuthentication no #是否用RSA算法的基于rhosts的安全验证 9 # RSAAuthentication yes #是否用RSA算法进行安全验证 10 # PasswordAuthentication yes #是否用口令验证 11 # HostbasedAuthentication no 12 # BatchMode no 13 # CheckHostIP yes #设置SSH是否查看连接到服务器的主机的IP地址,以防止DNS欺骗 14 # AddressFamily any 15 # ConnectTimeout 0 16 # StrictHostKeyChecking ask 17 # IdentityFile ~/.ssh/identity #设置从哪个文件读取用户的RSA安全验证标识 18 # IdentityFile ~/.ssh/id_rsa 19 # IdentityFile ~/.ssh/id_dsa 20 # Port 22 #设置连接到远程主机的端口 21 # Protocol 2,1 22 # Cipher 3des #设置加密用的密码 23 # Ciphers aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc 24 # EscapeChar ~ #设置escape字符 25 # Tunnel no 26 # TunnelDevice any:any 27 # PermitLocalCommand no 28 Host * 省略。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/etc/ssh/sshd_config 为OpenSSH的配置文件,关键词忽略大小写。(参数说明,参考:http://blog.sina.com.cn/s/blog_59e866610100aulb.html)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
[root@localhost ~]# cat /etc/ssh/sshd_config 省略。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 #Port 22 #设置sshd监听的端口号 #Protocol 2,1 Protocol 2 #指定ssh支持的通信协议版本 #AddressFamily any #ListenAddress 0.0.0.0 #设置sshd服务器绑定的IP地址 #ListenAddress :: # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key # Lifetime and size of ephemeral version 1 server key #KeyRegenerationInterval 1h #ServerKeyBits 768 #定义服务器秘钥的位数 # Logging # obsoletes QuietMode and FascistLogging #SyslogFacility AUTH SyslogFacility AUTHPRIV #LogLevel INFO # Authentication: #LoginGraceTime 2m #设置如果用户不能成功登陆,在切断连接之前服务器需要等待的时间(以秒为单位) #PermitRootLogin yes #是否允许root登陆 #StrictModes yes #MaxAuthTries 6 #限制用户错误登陆次数 #RSAAuthentication yes #PubkeyAuthentication yes #AuthorizedKeysFile .ssh/authorized_keys # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #RhostsRSAAuthentication no # similar for protocol version 2 #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication yes #是否允许口令验证 # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no GSSAPIAuthentication yes #GSSAPICleanupCredentials yes GSSAPICleanupCredentials yes 省略。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 #UsePAM no UsePAM yes # Accept locale-related environment variables AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL #AllowTcpForwarding yes #GatewayPorts no #X11Forwarding no X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #UseLogin no #UsePrivilegeSeparation yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #指定服务器端向客户端请求消息的时间间隔, 默认是0, 不发送.如ClientAliveInterval 60表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了 #ClientAliveCountMax 3 #使用默认值3即可,表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开. 正常情况下, 客户端不会不响应. #ShowPatchLevel no #UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10 #PermitTunnel no #ChrootDirectory none # no default banner path #Banner /some/path # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server
4、SSH的秘钥管理
SSH的秘钥管理主要包括两方面:生成公钥/私钥对和公钥的分发
4.1、生成用户自己的密钥对
4.1.1、好处:
(1)、可以防止“中间人”这种攻击方式
(2)、可以只用一个口令就登陆到所有用户想登陆的服务器上
4.1.2、生成密钥:
# ssh-keygen #1.x版本,若为2.x版本用 # ssh-keygen -d 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:
此时,用户有一对密钥:公钥要发布到所有用户想用SSH登陆的远程主机上去;私钥要妥善保管,防止他人知晓
查看/root/.ssh/目录下相应文件的访问权限,必须是“-rw------"
4.2、分发公用密钥
在每一个用户需要用SSH连接的远程服务器上,用户在自己的主目录下创建一个 .ssh 的子目录,把用户的公用密钥 id_rsa.pub复制到此目录下,并重命名为
authorized_keys,然后执行如下命令:
# chmod 644 .ssh/authorized_keys
若除了用户还有他人知对此文件有写的权限,SSH就不会工作。
若用户想从不同的计算机登陆到远程主机,authorized_keys 文件也可以有多高公用密钥,此时必须重新生成一对密钥,然后把id_rsa.pub复制到远程主机的
authorized_keys里。另外,新的计算机上用户必须有一个账号,而且密钥是用口令保护的。
SSH安全攻略:
1、关闭无关端口
为避免被扫描到,除必要端口外全部关掉,建议关闭icmp端口,并设置规则,丢弃icmp包。
丢弃icmp包可在iptables里加入下列代码:
-A INPUT -p icmp -j DROP
2、更改SSH端口
将默认端口22更改为10 000以上,以降低端口被扫描到的概率,方法如下:
# vim /etc/ssh/ssh_config
# vim /etc/ssh/sshd_config
将端口均更改为:
Port 22 Port 18438 #加入新的Port值,
重启ssh服务:
# service sshd restart
注意:
<1>此处设置两个SSH端口,主要是为防止出错导致SSH无法登陆,登陆成功后则须编辑上面两个配置文件删除22端口
<2>登陆成功后须在在iptables里删除22端口,添加新配置的18438端口
<3>若SSH登陆的是弱密码,则可以设置一个复杂密码
3、限制IP登陆
/etc/hosts.allow 和 /etc/hosts.deny 文件时tcpd服务器的配置文件,tcpd服务器可以控制外部IP对本机服务的访问。
这两个配置文件的格式如下:
# 服务进程名:主机列表:当规则匹配时可选的命令操作 server_name:hosts-list[:commond]
/etc/hosts.allow 控制可以访问本机的IP地址,/etc/hosts.deny 控制禁止访问本机的IP地址。若两者配置有冲突,以/etc/hosts.allow 为主。
为便于理解和管理,将允许进入的写入 /etc/hosts.allow当中,将不允许的写入 /etc/hosts.deny 当中
例子1:
# vim /etc/hosts.allow #添加以下内容:
ALL:127.0.0.1 #允许本机访问本地所有服务 sshd:192.168.75.130 #允许192.168.75.130登录
smbd:192.168.0.0/255.255.255.0 #允许 192.168.0.0网段的IP访问smbd服务
(举例说明:192.168.6.100代表一个主机,192.168.6.代表整个网段。同理,test.com代表一台主机,.test.com代表test.com域内所有主机。)
# vim /etc/hosts.deny #添加以下内容:
sshd:all:deny #不允许所有IP登录sshd,hosts.allow优先级大于hosts.deny in.telnet:ALL ALL:ALL EXCEPT 192.168.0.1/255.255.255.0,192.168.2.21,\ #不允许的IP 202.10.5.0/255.255.255.0
注意:service_name必须与xinetd或/etc/rc.d/init.d/*里面的程序名称相同:
例子2:
(1)只允许140.116.44.0/255.255.255.0和140.116.79.0/255.255.255.0这两个网域,以及140.116.141.99这个主机进入Telnet服务器
(2)其他IP全部拦截
首先,# vim /etc/hosts.allow ,添加以下内容:
telnet: 140.116.44.0/255.255.255.0 :allow #允许 telnet: 140.116.79.0/255.255.255.0 :allow #允许 telnet: 140.116.141.99 #允许
其次,# vim /etc/hosts.deny, 设置为全部拦截:
telnet: ALL : deny
ALL代表全部,更安全的设置是:当有人扫描Telnet端口时,就记住其IP,作为查询与认证之用。修改如下:
# vim /etc/hosts.deny,内容为:
#telnet: ALL : deny telnet: ALL : spawn (echo Security notice fromo host '/bin/hostname'; \ echo; /usr/sbin/safe_fingetr @%h) | \ /bin/mail -s "%d-%h security" root & \ :twist ( /bin/ehco -e "\n\nWARNING connection not allowed.Your attempt has been logged. #警告您尚未允许登录,您的联机将会被记录,并且作为以后的参考
注意:
<1>root可以写成个人账号或其他E-mail。
<2>某些没有安装tcp_wrappers的套件的distribution中,由于没有safe_finger等程序,无法执行相关的功能。