紧接着Ubunt系统SSH命令详解一讲解...

三、ssh服务常见问题与总结 

        问题一 :ssh登录的时候链接端口失败 

        提示(1): ssh: connect to host 172.16.81.221 port 22: No route to host 

        这由于server端没有开机或是网络不通(这个原因很多,最简单的是网线没有插。还有就是可能会是网卡down了等)。 

         提示(2): # ssh work@172.16.81.221 

                               ssh: connect to host 172.16.81.221 port 22: Connection refused 

        这是由于对方server的ssh服务没有开。这个server端开启服务即可。

 

        问题二 :ssh到server上的时候密码是对的但是报如下信息:

                    # ssh 172.16.81.221       (如果hsotIP前面不加主机用户名,则默认连root用户)

                       root@172.16.81.221's password: 

                        Permission denied, please try again. 

       这个是由于如果不输入用户名的时候默认的是root用户,但是安全期间ssh服务默认没有开root用户的ssh权限 。

       解决方法:

       要修改root的ssh权限,即修改 /etc/ssh/sshd_config文件,把PermitRootLogin no改为为PermitRootLogin yes 。

 

问题三 

登录是出现如下提示: 

ssh root@172.16.81.221 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ 

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 

Someone could be eavesdropping on you right now (man-in-the-middle attack)! 

It is also possible that the RSA host key has just been changed. 

The fingerprint for the RSA key sent by the remote host is 

76:fb:b3:70:14:48:19:d6:29:f9:ba:42:46:be:fb:77. 

Please contact your system administrator. 

Add correct host key in /home/fante/.ssh/known_hosts to get rid of this 

message. 

Offending key in /home/fante/.ssh/known_hosts:68 

RSA host key for 172.16.81.221 has changed and you have requested strict checking. 

Host key verification failed. 

server端密码或是ip对应的server等其他发生改变的时候。解决方法一般就需要删除~/.ssh/known_hosts的对应行,然后再登录即可。 

问题四 

如何通过ssh使用远程的图形启动到本地。 

在本机执行xhost +修改远端/etc/ssh/sshd_config文件,X11Forwarding yes这一行为yes。重启ssh服务。登录时执行ssh -X [远端IP]登录之后执行图形配置工具可以在本机显示 。 

================================= 

ssh连接不上解决思路 

近期因为搭建新服次数较多,所以自己总结了一下在遇到 ssh连接不上时候的解决思路,供大家参考。大家如果有什么新的思路也可以一起讨论一下 ~ 

以下的测试没有特殊说明均是使用普通账号登陆 

  www.2cto.com  

状况一: ssh IP_A 或ssh root@IP_A 都显示 Permission denied (publickey,gssapi-with-mic). 

思路:可以检查一下IP_A上面的SSH版本是否正确,线上服务器如果存在sshd路径是/use/local/bin/sshd的,一定要升级sshd版本,正确的版本是/usr/sbin/sshd 

状况二: ssh IP_A显示 Permission denied (publickey,gssapi-with-mic).但是ssh root@IP_A 成功 

思路:可以检查一下/etc/ssh/sshd_config,里面有一段AllowUsers,将User_name@IP_B[IP_B_HOSTNAME]写进去,然后再尝试连接一下 

状况三: ssh IP_A总是需要密码,但是ssh root@IP_A 成功(或也不成功,也需要密码) 

思路:可以检查一下文件夹和.ssh/authorized_keys的权限,如果权限太大也会出问题。基本authorized_keys给740就可以了。文件夹不仅仅是指.ssh,还需要注意一下/home/user,当user文件夹的权限过大时也会出现问题,这里需要注意一下 

ssh -v root@IP_A   (显示debug信息,便于后续调试) 

另外在实际中需要关注一下messlog,看一下里面有没有报错信息

让Ubuntu启动SSH服务

这个不用多说了,还是apt-getinstall大法:


  1. #sudoapt-getinstallssh 

不使用私钥的SSH还是有一定风险的。现在我们尝试在ubuntu服务器上生成私钥和公钥


  1. #ssh-keygen 

后面会提示你私钥的文件名,放在哪,这些问题,选择默认就行了,中途会让你输入密码,这个你可得记住。这样你的用户目录下会多出一个隐藏的.ssh文件夹。可以使用ls-A来查看。里面还有两文件,一个是id_rsa(私钥),还有一个是id_rsa.pub(公钥)

这个私钥和公钥到底是什么概念?

简单说,公钥就是你的银行帐户,这个可能别人也知道,但只有手上有信用卡或是存折才能有资格去试帐户密码。所以这个信用卡和存折就是你的私钥。所以这个私钥得保存好。

也就是说,那个id_rsa文件你得保存好,可以弄到U盘上,随身带着。而id_rsa.pub得改成系统默认识别的authorized_keys并保存在.ssh文件夹下

现在服务器已经可以有两种方式的登陆了,一种就是直接用户密码识别登陆,还有一个是RSA登陆。当然,后面那个比较安全,那么我们就把服务器还有一种登陆方式给去掉。

找到etc/ssh/sshd.conf这个文件,它是负责服务器端上的设置的:

#最好把这个选项设置成“PermitRootLoginwithout-password”,这样“root”用户就不能从没有密匙的计算机上登录。把这个选项设置成“no”

#将禁止“root”用户登录,只能用“su”命令从普通用户转成“root”。


  1. PermitRootLoginwithout-password 

#把这个选项设置为“no”只允许用户用基于密匙的方式登录。


  1. PasswordAuthenticationno 

利用putty使用RSA登陆

辛辛苦苦弄好的钥匙,那么我们就用起来吧。这个操作是在windows平台上的。

首先打开解压putty.tgz文件。先找到“puttygen.exe”这个文件,我们要让它帮我们做个通行证。

选择“载入”,也就是载入已保存的密钥文件(私要文件),弹出的对话框里把“文件类型”换成“所有文件”然后选中我们从ubuntu服务器上生成的id_rsa文件。

接着,它会提示你输入密码,这不是你linux用户密码,而是前面生成密钥时候的密码

完成之后就会提示你保存好私钥文件,按下“保存私钥”起好名字,注意(格式为*.ppk)因为putty只识别自己做的钥匙。。。如果你只是用putty远程登陆的话,那么另外个id_rsa文件可以不要了,保管好*.ppk就行

下来就是用这把钥匙登陆了,只要在登陆前完成这步:

好了。基本上SSH连接远端linux的任务就完成了。

SSH远程登入Ubuntu机


  1. sshusername@Ubuntu’sip(eg.192.168.0.1) 

将文件/文件夹从远程Ubuntu机拷至本地(scp)


  1. scp-rusername@192.168.0.1:/home/username/remotefile.txt. 

将文件/文件夹从本地拷至远程Ubuntu机(scp)


  1. scp-rlocalfile.txtusername@192.168.0.1:/home/username/ 

将文件/文件夹从远程Ubuntu机拷至本地(rsync)


  1. rsync-v-u-a–delete–rsh=ssh–statsusername@192.168.0.1:/home/username/remotefile.txt. 

将文件/文件夹从本地拷至远程Ubuntu机(rsync)


  1. rsync-v-u-a–delete–rsh=ssh–statslocalfile.txtusername@192.168.0.1:/home/username/ 

在Windows机上用SSH远程登录Ubuntu机


  1. sh-Xusername@192.168.0.1 

支持SSH图形界面。也就是说,gedit打开和另存都是在服务器端操作的。nautilus打开服务器端的文件管理器。这下就比只用命令行方便多了。不知道windows下的putty支持不


  1. ssh-Xusername@192.168.0.1ls 

直接在服务器端执行ls返回结果到客户端

下载PuTTY

如何在Windows机上拷贝文件/文件夹从/到远程Ubuntu机

下载FileZilla

如何限制通过SSH远程连接的用户帐号

如,假如你启用了SSH服务,那么任何有有效帐号的用户都可以远程连接。这可能会导致一些安全问题,由于有一些远程密码破解工具可以尝试常见的用户名/密码

备份SSH服务的配置文件


  1. sudocp/etc/ssh/sshd_config/etc/ssh/sshd_config.ORIGINAL 

编辑配置文件


  1. #sudogedit/etc/ssh/sshd_config 

*将参数PermitRootLogin由yes更改为no。超级用户不能直接通过远程联机。

*添加参数AllowUsers设定远程连接的用户名(用空格来分割)。

*您也可以使用DenyUsersforfine-grainedselectionofusers.


  1. *Ifyouenabletheopensshserverandyouhavenointentionfornowtoenableremoteconnections,youmayaddAllowUsersnosuchuserheretodisableanyoneconnecting. 

SSH命令

ssh命令可以用来在远程机器上不经shell提示登录而执行命令。它的语法格式是:sshhostnamecommand。譬如,如果你想在远程主机penguin.example.net上执行ls/usr/share/doc命令,在shell提示下键入下面的命令:


  1. sshpenguin.example.netls/usr/share/doc 

使用scp命令

scp命令可以用来通过安全、加密的连接在机器间传输文件。它与rcp相似。

把本地文件传输给远程系统的一般语法是:


  1. scplocalfileusername@tohostname:/newfilename 

localfile指定源文件,username@tohostname:/newfilename指定目标文件。

要把本地文件shadowman传送到你在penguin.example.net上的账号内,在shell提示下键入(把username替换成你的用户名):


  1. scpshadowmanusername@penguin.example.net:/home/username 

这会把本地文件shadowman传输给penguin.example.net上的/home/username/shadowman文件。

把远程文件传输给本地系统的一般语法是:


  1. scpusername@tohostname:/remotefile/newlocalfile 

remotefile指定源文件,newlocalfile指定目标文件。

源文件可以由多个文件组成。譬如,要把目录/downloads的内容传输到远程机器penguin.example.net上现存的uploads目录,在shell提示下键入下列命令:


  1. scp/downloads/*username@penguin.example.net:/uploads/ 

使用sftp命令

sftp工具可以用来打开一次安全互动的FTP会话。它与ftp相似,只不过,它使用安全、加密的连接。它的一般语法是:sftpusername@hostname.com。一旦通过验证,你可以使用一组和使用FTP相似的命令。请参阅sftp的说明书页(man)来获取这些命令的列表。要阅读说明书页,在shell提示下执行mansftp命令。sftp工具只在OpenSSH版本2.5.0p1以上才有。

如何让Ubuntu的ssh保持长时间连接?

Ubuntu是一个脱颖而出的Linux操作系统,在短短几年内便已逐步成为开源领域中一颗耀眼的明珠。使用ubuntu系统的用户越来越多了,但是有用户说在Ubuntu下的ssh连接老是自己会断,一段时间不理它就会失去响应。

如何让ssh连接服务器或者sshtunnel保持连接呢?

其实也很方便,只要在/etc/ssh/ssh_config文件里加两个参数就行了


  1. 1TCPKeepAliveyes  

  2. 2ServerAliveInterval300 

前一个参数是说要保持连接,后一个参数表示每过5分钟发一个数据包到服务器表示“我还活着”

如果你没有root权限,修改或者创建~/.ssh/ssh_config也是可以的

Linux下scp的用法

scp就是secure copy,一个在linux下用来进行远程拷贝文件的命令。
有时我们需要获得远程服务器上的某个文件,该服务器既没有配置ftp服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过简单的scp命令便可达到目的。

一、将本机文件复制到远程服务器上

#scp /home/administrator/news.txt root@192.168.6.129:/etc/squid

/home/administrator/      本地文件的绝对路径
news.txt                          要复制到服务器上的本地文件
root                                 通过root用户登录到远程服务器(也可以使用其他拥有同等权限的用户)
192.168.6.129                远程服务器的ip地址(也可以使用域名或机器名)
/etc/squid                       将本地文件复制到位于远程服务器上的路径



二、将远程服务器上的文件复制到本机

#scp remote@www.abc.com:/usr/local/sin.sh /home/administrator

remote                       通过remote用户登录到远程服务器(也可以使用其他拥有同等权限的用户)
www.abc.com              远程服务器的域名(当然也可以使用该服务器ip地址)
/usr/local/sin.sh           欲复制到本机的位于远程服务器上的文件
/home/administrator  将远程文件复制到本地的绝对路径


注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

如:

# scp  /var/log/sql-slow-queries.log root@192.168.1.50:/root   

把本地  /var/log/sql-slow-queries.log 这个文件copy到1.50上面/root 目录下面