SSH在系统管理与运维中的作用,想必大家都是知道的,常用且不可缺少。
远程安装调试SSH特别注意,OpenSSH卸载后,可能导致凡使用SSH协议连接服务器的工具都无法登陆,比如WINSCP、PUTTY等,如果你正使用远程桌面,最好先开启TELNET并确保开机启动(或其它可替代的远程管理工具也可以),客户端可以正常连接后才可动手更新SSH,否则一旦SSH启动失败,就只能找机房了。
一、卸载原来SSH
默认SSH会安装为服务,且开机启动,所以要先把服务停止(本文环境RedHat5.4):
service sshd stop
这时,建议备份一下/etc/init.d/sshd这个启动文件,因为下文编译安装OpenSSH后,没这个启动文件,尽管实际修改使用也不是太方便,除非你下文的安装目录跟原来的一样的。
mv /etc/init.d/sshd /etc/init.d/sshd.old
卸载软件包:
rmp -qa|grep openssh*
把输出列表中的SSH软件包都卸载掉。卸载方法请参考:Linux下软件卸载方法
二、下载并安装新的OPENSSH
wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-5.9p1.tar.gz
tar xzvf openssh-5.9p1.tar.gz
cd openssh-5.9p1
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man --with-zlib=/usr/local/zlib2
make && make install
这里需要注意,上面的./configure配置,天缘的默认路径如下:
openssl -> /usr/local/openssl
zlib -> /usr/local/zlib2
确认这些路径跟你的系统对应。不同则需手动修改掉。此外还有些参数,比如:
--bindir=/usr/bin --sbindir=/usr/sbin
可根据需要设定。
三、查询SSH版本
[root@localhost]# ssh -V
OpenSSH_5.9p1, OpenSSL 1.0.1 14 Mar 2012
四、设为服务开机运行
1、简单的开机启动设置方法
由于是自编译安装的OpenSSH,没有sshd这个启动文件,所以直接使用传统的启动方式,直接修改rc.local。打开/etc/rc.local,添加:
/usr/sbin/sshd
即可设置为开机启动。
2、爱折腾设置开机方法
使用chkconfig设置结合上文备份的sshd文件设为开机启动有点麻烦,首先还原/etc/init.d/sshd:
mv /etc/init.d/sshd.old /etc/init.d/sshd
再打开/etc/init.d/sshd文件(原装的sshd启动配置文件大概有4K多,主要确认顶部几个路径是否正确即可),天缘大概整理一下,主要如下几个(可能不一定完整,下次实际确认一下再补充完善):
...
# source function library
. /etc/rc.d/init.d/functions
# pull in sysconfig settings
[ -f /etc/sysconfig/sshd ] && . /etc/sysconfig/sshd
RETVAL=0
prog="sshd"
lockfile=/var/lock/subsys/$prog
# Some functions to make the below more readable
KEYGEN=/usr/bin/ssh-keygen
SSHD=/usr/sbin/sshd
RSA1_KEY=/etc/ssh/ssh_host_key
RSA_KEY=/etc/ssh/ssh_host_rsa_key
DSA_KEY=/etc/ssh/ssh_host_dsa_key
PID_FILE=/var/run/sshd.pid
...
确认这些并修改这些路径后保存。
使用chkconfig添加为服务:
chkconfig –add sshd
chkconfig –level 2345 sshd on
这样就设置完成了。
五、重启电脑或服务
启动SSH:
service sshd start
停止SSH:
service sshd stop
HostName归根结底,不过是个Name名称而已,目的是避开复杂的、无意义的主机标识(比如,默认的Localhost,IP标识等),让标识更人性化,更易记。如要访问该主机则需要进行一次“名称-IP地址”转换。 所以,这个Name是面向网络使用的,单机没有必要,就像一个人的名字一样,隐居南山的人根本不要什么名字,但是出来办理暂住证、未婚证明、子女择校、购买菜刀则需要名字。
首先我们需要搞厘清HostName跟ServerName、Host、DomainName、uname(RedHat)区别,然后再看看HostName格式是个什么样子的。
一、HostName概念理解
Linux(Redhat)上相关配置主机名相关的文件如下:
/etc/sysconfig/network
/etc/hosts
/proc/sys/kernel/hostname,Debian上是/etc/hostname
下面分别看看。
1、/etc/sysconfig/network
RedHat5.4内容如下:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=localhost.localdomain
默认HostName是localhost.localdomain,一般相同类型、版本系统安装完成后的默认值都相同。实际应用需手动修改掉。
2、/etc/hosts
这个文件Linux和Windows都有,只供本机“向外访问”解析使用的,相当于本机的DNS,所以设置的所谓HostName其实并不能对外部生效。比如自己设置:
12.34.56.78 Gogo
执行ping Gogo会自动转向12.34.56.78,而别人的机子可能设置为:12.34.56.78 Yazi,则需要ping Yazi。
但是,/etc/rc.d/rc.sysinit启动初始化文件则会检查/etc/sysconfig/network的HostName,如果是默认值(Localhost或Localhost.localdomain),还会检查这个/etc/hosts是否设置了名称,如果设置了新的名称则会自动替换/etc/sysconfig/network。
3、/proc/sys/kernel/hostname
RedHat5.4上该文件则只有这么一句:
localhost.localdomain
所以默认这个名称跟/etc/sysconfig/network是相同的。相同的为什么还需要记在两个地方呢?(肯请网友指教),天缘理解是/proc/sys/kernel/hostname看名称是供内核使用的文件,可能只是的系统内核变量。而/etc/sysconfig/network则记录更多与网络有关的参数设置,比如上文的IPV6是否开启等。
二、如何查看和修改HostName
1、查看主机名称
查看HostName命令如下:
# uname -n
# hostname
# cat /proc/sys/kernel/hostname
2、修改主机名称
临时修改,重启丢失:
# hostname newhostname
临时修改立即生效。
永久修改HostName(假设设置主机名为www.):
# echo "HOSTNAME=www." >> /etc/sysconfig/network
# hostname "www."
上一句设置到文件永久修改,下一句临时修改,立即生效。这样修改后无需重启,因为临时修改和重启后配置相同。
三、HostName概念归纳
厘清这些概念,尽管有些概念之间风马牛不相及,但是他们都是Name:
HostName —— 上文介绍
ServerName —— 站在Client角度去称呼HostName
Host —— 主机统称
DomainName —— 域名,就像www.,给所有人及访客使用,DNS负责解析映射到IP。
uname —— Linux显示系统信息命令,具体可使用uname --help 查看。
本文介绍Linux命令判断CC攻击的几种常用方法,紧急时刻非常实用的哦。
查看所有80端口的连接数
对连接的IP按连接数量进行排序
查看TCP连接状态
netstat -n | awk ‘/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}’
netstat -n | awk ‘/^tcp/ {++state[$NF]}; END {for(key in state) print key,”\t”,state[key]}’
netstat -n | awk ‘/^tcp/ {++arr[$NF]};END {for(k in arr) print k,”\t”,arr[k]}’
netstat -n |awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn
netstat -ant | awk ‘{print $NF}’ | grep -v ‘[a-z]‘ | sort | uniq -c
查看80端口连接数最多的20个IP
netstat -ant |awk ‘/:80/{split($5,ip,”:”);++A[ip[1]]}END{for(i in A) print A,i}’ |sort -rn|head -n20
用tcpdump嗅探80端口的访问看看谁最高
查找较多time_wait连接
查找较多的SYN连接