ssh 标签文章 - 李海鑫个人博客

(2010-8-23)ssh超时断开的解决方法

编辑文章 没有评论 :

高版本的Linux自带的OpenSSH在使用的时候,几分钟不操作的话就会自动断开连接,这是出于安全的考虑,但是对于需要长时间使用的用户来说很麻烦,每次都要重新连接。解决方法如下:

本文HTML永久地址doc

1、echo $TMOUT

如果显示空白,表示没有设置, 等于使用默认值0, 一般情况下应该是不超时. 如果大于0, 可以在如/etc/profile之类文件中设置它为0. Definition: TMOUT: If set to a value greater than zero, the value is interpreted as the number of seconds to wait for input after issuing the primary prompt. Bash terminates after waiting for that number of seconds if input does not arrive 2、修改/etc/ssh/sshd_config文件

将ClientAliveInterval 0和ClientAliveCountMax 3的注释符号去掉,将ClientAliveInterval对应的0改成60,ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔, 默认是0, 不发送.而ClientAliveInterval 60表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了.ClientAliveCountMax, 使用默认值3即可.ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开. 正常情况下, 客户端不会不响应. 想参考更多,请输入man sshd_config了解更多信息

下面是man sshd_config获取的描述信息

ClientAliveInterval:

Sets a timeout interval in seconds after which if no data has been received from the client, sshd will send a message through the encrypted channel to request a response from the client. The default is 0, indicating that these messages will not be sent to the client. This option applies to protocol version 2 only.

ClientAliveCountMax:

Sets the number of client alive messages (see above) which may be sent without sshd receiving any messages back from the client. If this threshold is reached while client alive messages are being sent, sshd will disconnect the client, terminating the session. It is important to note that the use of client alive messages is very different from TCPKeepAlive (below). The client alive messages are sent through the encrypted channel and therefore will not be spoofable. The TCP keepalive option enabled by TCPKeepAlive is spoofable. The client alive mechanism is valuable when the client or server depend on knowing when a connection has become inactive.The default value is 3. If ClientAliveInterval (above) is set to 15, and ClientAliveCountMax is left at the default, unresponsive ssh clients will be disconnected after approximately 45 seconds.

  1. 启用putty keepalive

putty -> Connection -> Seconds between keepalives ( 0 to turn off ), 默认为0, 改为60.

(2009-8-11)不能登陆ssh,提示Server refused to allocate pty

编辑文章 没有评论 :

本文HTML永久地址doc

今天远程ssh登录我的vps的时候,出现 Server refused to allocate pty

解决办法:

mknod -m 666 /dev/ptmx c 5 2 
chmod 666 /dev/ptmx 
mkdir /dev/pts 

添加后就ok了

(2008-10-31)使用ssh翻墙访问国外网站

编辑文章 没有评论 :

本文HTML永久地址doc

国外有些很好的网站,在国内不能正常访问,只能通过代理软件访问,不过稳定性不是很高,如果自己有国外的ssh帐号,可以通过ssh翻墙访问,最简单操作如下:

现在有了 MyEnTunnel,这些所有问题都迎刃而解了。事实上,MyEnTunnel 就是一个 pLink 的前端程序,建立 SSH Tunnel 还是靠 pLink(自带)。在 MyEnTunnel 中,我们只需要填写好相关的信息即可,不需要记忆 pLink 那“丰富”的参数。对于一般用户而言,我们只需要设置以下几项(Setting 选项卡):

  1. SSH Server:就是你的 SSH 服务器的地址;
  2. SSH Port:一般都是 22;
  3. Username/Password:用户名/密码;
  4. 选中 Reconnect on Failure,Enable Dynamic SOCKS;
  5. Port:填上你本地代理的端口,如 8080;

然后点击 Connect 就可以了,等待任务栏中的小锁变成绿色,说明我们成功建立了一条 SSH Tunnel,并在 localhost:8080 上开启了一个 Socks 服务器。在你的浏览器中进行相关设置后,你就可以看到 Feedburner,看到 WordPress.com,看到 YouTube 了……

当然,相对于直接使用 pLink 来说,MyEnTunnel 最大的优势在于“断线重连”功能。它可以自动监视 pLink 的运行状态,如果断线了便可以自动重新连接。对于本本用户来说,我们可以自由的合上本本待机了,

(2008-6-3)用OpenSSH构建SSH服务器

编辑文章 没有评论 :

用OpenSSH构建SSH服务器


前言

本文HTML永久地址 doc


SSH服务和Telnet服务一样,通过远程登录登录到系统,在远程操控系统。但它与Telnet的不同点就是:Telnet在传输的过程中是平文传输,而SSH是将传输内容加密,在传送的过程中保证了传送内容的保密性,从而提高了系统的安全性。

在这里,我们不准备将SSH服务作为用户上传下载文件的工具。我们只用SSH服务的开通为远程管理系统提供方便。另外在用户认证方式上,为了服务器和用户的安全,禁止用户密码的认证方式,而基于“钥匙”的方式。
SSH相关配置文件的修改

首先修改SSH的配置文件。如下:

[root@sample ~]# vi /etc/ssh/sshd_config  ← 用vi打开SSH的配置文件

#Protocol 2,1 ← 找到此行将行头“#”删除,再将行末的“,1”删除,只允许SSH2方式的连接
 
Protocol 2 ← 修改后变为此状态,仅使用SSH2

#ServerKeyBits 768 ← 找到这一行,将行首的“#”去掉,并将768改为1024
 
ServerKeyBits 1024 ← 修改后变为此状态,将ServerKey强度改为1024比特

#PermitRootLogin yes  ← 找到这一行,将行首的“#”去掉,并将yes改为no
 
PermitRootLogin no  ← 修改后变为此状态,不允许用root进行登录

#PasswordAuthentication yes ← 找到这一行,将yes改为no
 
PasswordAuthentication no ← 修改后变为此状态,不允许密码方式的登录

#PermitEmptyPasswords no  ← 找到此行将行头的“#”删除,不允许空密码登录
 
PermitEmptyPasswords no  ← 修改后变为此状态,禁止空密码进行登录


然后保存并退出。(vi保存退出的命令为ZZ)

因为我们只想让SSH服务为管理系统提供方便,所以在不通过外网远程管理系统的情况下,只允许内网客户端通过SSH登录到服务器,以最大限度减少不安全因素。设置方法如下:

[root@sample ~]# vi /etc/hosts.deny  ← 修改屏蔽规则,在文尾添加相应行
#
# hosts.deny    This file describes the names of the hosts which are
#               *not* allowed to use the local INET services, as decided
#               by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow.  In particular
# you should know that NFS uses portmap!
sshd: ALL  ← 添加这一行,屏蔽来自所有的SSH连接请求

[root@sample ~]# vi /etc/hosts.allow  ← 修改允许规则,在文尾添加相应行
#
# hosts.deny    This file describes the names of the hosts which are
#               *not* allowed to use the local INET services, as decided
#               by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow.  In particular
# you should know that NFS uses portmap!

sshd: 192.168.0.  ← 添加这一行,只允许来自内网的SSH连接请求


重新启动SSH服务

在修改完SSH的配置文件后,需要重新启动SSH服务才能使新的设置生效。

[root@sample ~]# /etc/init.d/sshd restart  ← 重新启动SSH服务器

Stopping sshd:             [ OK ]
Starting sshd:             [ OK ]  ← SSH服务器重新启动成功


SSH2的公钥与私钥的建立

登录为一个一般用户,基于这个用户建立公钥与私钥。(这里以test用户为例)

[root@sample ~]# su - test ← 登录为一般用户test
[test@sample ~]$ ssh-keygen -t rsa  ← 建立公钥与私钥
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):  ← 钥匙的文件名,这里保持默认直接回车
Created directory '/home/test/.ssh'
Enter passphrase (empty for no passphrase):  ← 输入口令
Enter same passphrase again:   ← 再次输入口令
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
tf:rs:e3:7s:28:59:5s:93:fe:33:84:01:cj:65:3b:8e [email protected]


然后确认一下公钥与密钥的建立,以及对应于客户端的一些处理。

[test@sample ~]$ cd ~/.ssh  ← 进入用户SSH配置文件的目录
[test@sample .ssh]$ ls -l  ← 列出文件
total 16
-rw------- 1 test test 951 Sep 4 19:22 id_rsa  ← 确认私钥已被建立
-rw-r--r-- 1 test test 241 Sep 4 19:22 id_rsa.pub  ← 确认公钥已被建立
[test@sample .ssh]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  ← 公钥内容输出到相应文件中
[test@sample .ssh]$ rm -f ~/.ssh/id_rsa.pub  ← 删除原来的公钥文件
[test@sample .ssh]$ chmod 400 ~/.ssh/authorized_keys  ← 将新建立的公钥文件属性设置为400


然后,将私钥通过安全的方式转移到欲通过SSH连接到服务器的PC上。这里,以通过3.5寸磁盘为介质为例:

test@sample .ssh]$ exit   ← 退出一般用户的登录(返回root的登录)
[root@sample ~]# mount /mnt/floppy/  ← 加载软盘驱动器
[root@sample ~]# mv /home/test/.ssh/id_rsa /mnt/floppy/  ← 将刚刚建立的私钥移动到软盘[root@sample ~]# umount /mnt/floppy/  ← 卸载软盘驱动器


这样,我们通过对应于test用户的私钥,就可以在远程终端上通过SSH客户端连接到服务器了。但服务器生成的私钥匙不能被客户端直接应用…详细请见下一节。

(2008-5-31)打造安全的SSH服务器

编辑文章 没有评论 :

本文HTML永久地址 doc

  1. 使用强壮的密码
  2. 管理root登录
  3. 关闭SSH 第一版协议
  4. 使用非标准的端口
  5. 开启防火墙过滤
  6. 建立SSH2公钥和私钥认证