设置ssh自动登录远程主机的配置要点

本地生成的的RSA密钥传需要传到远程主机相应用户家目录下的.ssh子目录下,注意该子目录的权限设置是有严格要求的:其所属用户当然是该用户,其权限应该是700, 即不允许其它用户进入并访问该目录;否则,无法自动登录的。

这种情况下,使用ssh 的-v参数显示详细消息大致如下:

$ ssh -v feng@myremote.host.net
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to myremote.host.net [50.116.14.251] port 22.
debug1: Connection established.
debug1: identity file /home/feng/.ssh/identity type -1
debug1: identity file /home/feng/.ssh/id_rsa type 1
debug1: identity file /home/feng/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'myremote.host.net' is known and matches the RSA host key.
debug1: Found key in /home/feng/.ssh/known_hosts:8
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_501' not found

debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_501' not found

debug1: Unspecified GSS failure.  Minor code may provide more information

debug1: Unspecified GSS failure.  Minor code may provide more information

debug1: Next authentication method: publickey
debug1: Offering public key: /home/feng/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Offering public key: .ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Trying private key: /home/feng/.ssh/identity
debug1: Trying private key: /home/feng/.ssh/id_dsa
debug1: Next authentication method: password
feng@myremote.host.net's password:

了解关于ssh免密码登录,强烈推荐这篇文章,基于ssh密钥对的自动登录原理及实际操作

另请参看 ssh无密码登入设置(完全版)/linux下免输入密码ssh登录

解决ssh连接linux服务器速度慢

核心:

服务器端sshd配置文件 /etc/ssh/sshd_config 看是否有如下的两条配置条目

GSSAPIAuthentication no
UseDNS no

如果前面带#,请把#删掉,或者新添加入这样两行。
然后重启sshd服务,或者重启服务器也可以。

注意是文件 /etc/ssh/sshd_config 而不是/etc/ssh/ssh_config

 

ssh 登录远程服务器,速度非常慢,通过网上查询,发现有一个参数 -v 可以输出显示连接的具体消息。于是连接加上这个参数连接

[feng@fsc ~]$ ssh -v foo.path8.net
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to v.path8.net [64.120.xxx.xxx] port 22.
debug1: Connection established.
debug1: identity file /home/feng/.ssh/identity type -1
debug1: identity file /home/feng/.ssh/id_rsa type 1
debug1: identity file /home/feng/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'v.path8.net' is known and matches the RSA host key.
debug1: Found key in /home/feng/.ssh/known_hosts:4
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
/*--------- 这里停留的十多秒钟时间 ----------*/
reverse mapping checking getaddrinfo for srv3.mktmaster.net [64.120.xxx.xxx] failed - POSSIBLE BREAK-IN ATTEMPT!
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_501' not found

debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_501' not found

debug1: Unspecified GSS failure.  Minor code may provide more information


debug1: Next authentication method: publickey
debug1: Offering public key: /home/feng/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env XMODIFIERS = @im=ibus
debug1: Sending env LANG = zh_CN.utf8
Last login: Mon Oct 24 10:26:30 2011 from 124.79.xxx.xxx
[feng@v ~]$

大概就是GSSAPIAuthentication这个参数的问题了,之前就是因为连接速度慢,网上查,说是/etc/ssh/sshd_config 里加入参数 UseDNS no,再加个GSSAPIAuthentication yes, 结果速度还是慢。
于是去把这行改为GSSAPIAuthentication no,重启服务器端的ssdh服务,再次连接,速度快多了。

参考

悲剧,狗爹虚拟主机的ssh禁用转发了

悲剧了

悲剧,狗爹虚拟主机的ssh -d禁用转发了,快十一了,网络质量非常不好,博客后台半天都没有打开完成,就在标题里写内容了。

文章发布出去,页面终于可以打开完成了,补几句。

突然发现ssh不能翻墙了,查看进程是正常的,杀死自动重新运行,修改配置重启手动运行,照样没用,网查看错误消息

channel 1: open failed: administratively prohibited: open failed
channel 2: open failed: administratively prohibited: open failed

有中文资料,有几个原因,其中一个是最不愿意看到的原因,服务器端禁止转发了,然而经过加-v参数,看详细消息,越来越像这个原因,ssh登录到服务器上查看sshd相关的几个参数,

-bash-3.2$ less /etc/sysctl.conf |grep ip_for
net.ipv4.ip_forward = 0

果然操作系统级禁用转发

-bash-3.2$ cat /etc/ssh/sshd_config

文件最后一行

AllowTcpForwarding no
看来似乎是管理员刚加的这个参数。不过uptime显示系统启动17天了,难道这个设置还是修改后不重启就生效的?sshd的可以修改后重启服务立刻生效,但sysctl.conf级的呢?或许是管理员只是修改了这个设置,并没有重启机器。

最不愿意看到原因。

看来要买个vps,或者买个专门用于ssh转发的账号

linux下ssh -D 转发脚本/ssh断线后自动重连

ssh转发ssh -D的作用就不说了,相信看到这篇文章的童鞋们应该都......[此处略去N个字]。

有不少ssh服务器会定期踢除不活动的连接,尤其像我这样使用 "ssh -D " + autoproxy,通常访问的网站都是没有被有被墙的,于是ssh长时间不活动,于是被服务器踢了。写一个简单脚本,解决这一问题。

前提:

有ssh服务器账号密码,并设置好免密码登录ssh.

思路:

写脚定期查看ssh进程是否已经退出,如果退出则重新连接ssh。

设置一个命令别名alias,以一个简单的别名运行这一脚本。

实施:

在~/.bashrc 追加一行

alias fkgxx='sh ~/script/fkgxx &'

以下代码保存为 ~/script/fkgxx

#!/bin/bash

while [ '' == '' ]
do
	ssh_d_process_num=`ps aux|grep -E 'ssh \-' |grep -v grep |wc -l`
	#echo 'ssh_d_process_num:'$ssh_d_process_num
	if [ "$ssh_d_process_num" == "0" ]; then
	#	echo 'ssh -d terminaled'
		/usr/bin/ssh -D :7070 -N fengyqf@path8.net &
	#else
	#	echo 'ssh -d running'
	fi

	sleep 5
done

用法:

开启命令行终端,执行fkgxx,即可;当然设置成登录后自动运行也可以。

不足:

简单的根据进程判断ssh转发进程状态,这并不完善,因为有时该进程可能成为僵死进程,最好再加个检查7070端口是否在正常监听。

PS:

还可以使用autossh实现自动连接功能,可能这是个更好的方案;这里只是个另一个选择,另一个折腾的方法,追求自由精神的选择。

ssh无密码登入设置(完全版)/linux下免输入密码ssh登录

配置ssh不需要密码登录远程主机,网上有很多文章,但好像完整的不多,笔者参照操作,但得到消息:

Agent admitted failure to sign using the key.

原来是没有启动ssh-agent及把私钥加入到ssh-agent,参考如下文章得以解决问题。下文是完整的配置无密码登录ssh远程主机的方法,推荐参阅。

[注]正文来自http://www.jiangmiao.org/blog/559.html,在此表示感谢!

 

现有2台机器

1、服务器192.168.1.112

2、个人机192.168.1.110

要使110无需密码通过ssh登入112

步骤

1、创建密钥

miao@u32-192-168-1-110:~/.ssh$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): (忽略)
Enter same passphrase again: (忽略)
Your identification has been saved in /home/miao/.ssh/id_rsa.
Your public key has been saved in /home/miao/.ssh/id_rsa.pub.

2、复制公密到服务器

miao@u32-192-168-1-110:~/.ssh$ scp id_rsa.pub miao@192.168.1.112:/home/miao/.ssh/192.168.1.110
miao@192.168.1.112's password:
id_rsa.pub                                                                   100%  404     0.4KB/s   00:00
miao@u32-192-168-1-110:~/.ssh$

3、添加公密到192.168.112的信任区域

miao@debian-192-168-1-112:~/.ssh$ cat 192.168.1.110 >> authorized_keys
miao@debian-192-168-1-112:~/.ssh$

注: 2,3两步可由命令ssh-copy-id一步到位

miao@ubuntu-192-168-1-110:~/.ssh$ ssh-copy-id miao@192.168.1.112
Password:
Now try logging into the machine, with "ssh 'miao@192.168.1.112'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

4、启动ssh-agent

如果ssh 192.168.112返回 Agent admitted failure to sign using the key
ps -Af | grep agent查看有无ssh-agent有无运行,若没有

miao@u32-192-168-1-110:~/.ssh$ ssh-agent

5、添加id_rsa到ssh-agent

miao@u32-192-168-1-110:~/.ssh$ ssh-add id_rsa

6、完成

from http://www.jiangmiao.org/blog/559.html

回答:关于linux的远程连接管理

这是一次跟网友的交谈记录,关于linux远程管理的,整理不足,比较乱

收到网友的提问:您好,我刚换的linux,不知如何远程连接,您对这个了解吗?

回答:不知道你所说的“远程连接”指的是什么,是使用用linux连接其它的机器呢,还是在其它机器上连接linux呢?还有“连接”的目的是什么,是想ftp访问,或是局域网共享,或是远程桌面? 还有你的linux 是哪个发行版,哪个版本?

我使用fedora14.
如 果是使用linux连接windows,有rdesktop可以使用,也叫remote desktop connection,KDE下有GUI的连接工具,我还是习惯使用命令行的,rdesktop,fedora安全盘dvd里自带,但默认状态下不安装。 可以yum在线安装。
如果是使用windows远程连接linux,那ssh是最好的工具,一般发行版都会默认安装sshd——即ssh服务器端,并已经默认自动启动。windows下连接linux,有ssh客户端,可以使用putty,据说还有一个pietty,没用过。
如果想图形化连接linux,相应的工具好像是VNC,没了解过。
如是linux远程连接linux,那当然还是ssh了。
如果是ftp连接,使用ftp软件,局域网共享,有nfs(linux对linux),与windows可以使用samba

还 有,远程连接需要可以直接连接的互联网,如果服务器端在使用私网IP的局域网里(国内局域网一般都是私网ip,典型的ip是 192.168.xx.xx),那就需要在局域网的与公网连接的路由器上设置NAT端口映射。如果服务器与客户端在同一局域网中,当然是可以直接连接的, 不需要nat的。

问:我新买的服务器主机是linux的,我的电脑是windows,想远程连接linux上传文件,但是不知道如何上传啊

答:是vps吧,常规管理建议使用ssh,在windows下使用putty,sourcforge上有下载,上传下载文件可以使用ftp,前提是vps上安 装ftp服务器端,一般vps上会带的。或者使用变态一点的,ssh登录vps,然后使用wget从某个服务器上下载(前提是要把文件传到一台可以通过公 网访问的机器上),这样在vps上可以不用安装ftp服务器端。服务器上装服务软件越多、开放端口越多,就越不安全。
问:谢谢您的回答,我还真得好好研究研究putty和vnc,这两个东西陌生啊

答:建议不要用vnc,图形化效率太低,也太慢,如果在vps上可能根本运行不起来。
putty就是个ssh客户端。
推荐使用ssh,使用它远程连接到一台linux主机上,效果跟你坐在它前面直接在当面进行字符界面操作完全一样
问:只是putty界面是命令界面,而不是传统的图形界面,更要命的是我还不知道如何上传文件到哪里,这到让我有点摸不着头脑,服务商建议我用windows的系统,但我想要的就是linux的缓存功能,看来这linux还真需要花点那时间

答:是vps吧,常规管理建议使用ssh,在windows下使用putty,sourcforge上有下载,上传下载文件可以使用ftp,前提是vps上安 装ftp服务器端,一般vps上会带的。或者使用变态一点的,ssh登录vps,然后使用wget从某个服务器上下载(前提是要把文件传到一台可以通过公 网访问的机器上),这样在vps上可以不用安装ftp服务器端。服务器上装服务软件越多、开放端口越多,就越不安全。

你应该是说的vps吧,不知道你用的是哪家提供的,他们应该提供一个基于浏览器的管理后台,可以设置web站点、ftp服务器端设置、用户管理等,国内的vps我不了解, 我了解与用过国外的vps,一般都会提供这样功能

后记:虽然很早就开始学习linux,但最近一两年才真正有所进步,这里算是知一当十了,不知是否有错,希望没有误人子弟。如果哪们朋友发现错误,请不吝留言批评指正,不胜感激。

ConnectBot: Android上的一款带SSH 客户端功能的终端模拟软件Terminal Emulator

ConnectBot: 推荐Android上的一款带SSH 客户端功能的终端模拟软件Terminal Emulator

ConnectBot是托管于google code的项目:http://code.google.com/p/connectbot/

下载地址 http://code.google.com/p/connectbot/downloads/list

据说它具有类似putty,利用connectbot的端口转发也能实现手机翻墙的功能,但没有试用。

ConnectBot可以支持本地localhost,ssh,telnet三种连接模式,值得一用。