基于多个SSH服务器构建SSH代理

前一篇文章使用了scp跨两个内网进行文件传输,其实还可以有一种更简单的办法进行处理,就是构建SSH代理。

编辑.ssh目录下的config文件

nano ~/.ssh/config

然后指定不同的服务器,注意其中的ProxyCommand指令:

Host bridge1
  HostName alias1.example.com

Host private1
  ProxyCommand ssh -q bridge1 nc -q0 private1 22

Host private2
  ProxyCommand ssh -q private1 nc -q0 private2 22

这样,就构建了private1、bridge1两个ssh代理,访问private2服务器可以将其当做一个本地服务器直接使用,也可以直接scp进行数据的上传和下载。

参考:http://sshmenu.sourceforge.net/articles/transparent-mulithop.html

使用SSH构建内网隧道

之前一直使用学校提供的vpn工具访问放在学校机房内网的服务器,多数时间是没有问题的,但到重大事件时会提高安全防范级别,这是vpn服务器就会关停,在家里工作就傻眼了。于是就想看看是否有什么工具可以穿透内网,保证我有需要的时候可以随时访问。

搜索了一圈后,发现ssh就能实现这个功能。前提是需要有一个可以访问的外网服务器。

假定,内网服务器为N,外网服务器为W。

  1. 在N服务器上可以使用密钥登陆服务器W,这样可以保证登陆时不需要使用密码。
  2. 在服务器N上安装autossh工具,其主要功能是提高ssh链接稳定性,并在ssh连接断开后自动重连。
  3. 在服务器N上执行:
sudo autossh -M 7291 -gCNR 7290:localhost:22 -i ~/.ssh/id_rsa user@W &

这样就可以通过服务器W的7290端口访问服务器N的22端口:

ssh -p 7290 user@W

当然,用同样方法还可以构建其他应用,比如80端口等。

参考:https://blog.csdn.net/upshi/article/details/78630285

ubuntu下用ssl方式使用remmina远程桌面

一台服务器上的virtualbox虚拟机,需要做部分改动工作。于是首先打开虚拟机上的远程桌面:

VBoxManager controlvm win2003 vrde on

然后尝试用host的IP进行远程桌面访问,发现无法访问,于是知道了这个3389端口是开到虚拟机的内网ip地址上了。

开始想搜索端口转向,将外网ip的端口转向到内网里,但在remmina的配置界面发现有个配置SSH的tab,进行对应的配置后就可以直接使用内网ip进行远程桌面了。

其中,SSH服务器采用指定方式,指定为外网的ip地址,验证方式为密码(当然也可以是公钥,需要提前配置好)。

保持服务器的ssh链接

在使用ssh链接到服务器过冲中,经常会遇到ssh断开的问题:

Write failed: Broken pipe

遇到此种问题,在mac或linux下可以这样处理,参考[1]:
添加或编辑config文件,
nano ~/.ssh/config
在其中加入:
ServerAliveInterval 60

然后重新ssh链接即可。

1. http://blog.csdn.net/fodly/article/details/13016311

 

update:

可以更新服务器的/etc/ssh/sshd_config文件参数:

ClientAliveInterval 30

ClientAliveCountMax 6

在ssh命令链接的时候,也可以通过参数指定:

ssh -o ServerAliveInterval=60 xxx.xxx

 

ubuntu登陆慢及sudo慢的问题

利用云平台开了2台ubuntu的服务器,但在使用中发现几个问题,最终找到解决方案,记录如下(但是我新装的ubuntu server好像没有这几个问题,估计可能是采用的映像有问题)。
1. ssh登陆响应很慢
2. sudo响应很慢
这两个问题我开始还以为是云终端的配置太差,后来搜索一下,发现是系统设置的问题。

解决方法:

1. 修改/etc/ssh/sshd_config
添加:UseDNS no

2. 修改/etc/hosts
将当前的主机名添加到127.0.0.1后面

3. 默认给开了root账号,需要取消root远程登陆权限,编辑/etc/ssh/sshd_config
PermitRootLogin no

注意,sshd_config文件修改完后需要重启ssh服务才能生效:

sudo service ssh restart

用ssh tunnel来代理登陆远程postgresql数据库

postgresql数据库通常都限定了远程用户访问时的IP地址,因此在出差的时候若想访问数据库服务器就可以使用ssh tunnel来代理登陆。
命令也很简单:

ssh -L5432:dbmachine:5432 username@remote_ip

其中,dbmachine为远程数据库所在的服务器所在的IP地址,前面的端口号为本地所用的端口号,后面的端口号为远程数据库所使用的端口号,remote_ip为可以访问数据库服务器的机器。

然后就可以使用pgadmin或者psql来远程访问数据库了:

psql -h localhost -p 5432 -d dbname -U username

Fix for SSH slow to ask for password in Ubuntu Feisty Fawn

在UBUNTU FEISTY下默认进行SSH登录的时候,开始连接的速度好像有点慢,今天看到这个才知道原因。
解决办法:

Solution 1

Edit the /etc/ssh/ssh_config file using the following command

sudo nano /etc/ssh/ssh_config

Commentout the following lines

GSSAPIAuthentication yes
GSSAPIDelegateCredentials no

save the file and exit

X over SSH

X的远程应用,我原来一直用的是vnc,居然不知道用SSH这么简单就可以远程X了。
ssh -X remotehost
or
ssh -Y remotehost

但是我现在好像只能运行X程序,完整的X桌面我还运行不起来,包括KDE、GNOME。而且在GNOME下如何把声音也远程?这也是个问题,esound应该能支持,具体的做法还不知道。
参考:http://www.vanemery.com/Linux/XoverSSH/X-over-SSH2.html

SSH拒绝登录的问题

DEBIAN SARGE服务器,升级到testing后,无法ssh登录了。
经在服务器上检查,SSHD没有问题,帐号没有问题,密码没有问题,服务器安全也没有问题。最终发现是由于默认的安全性得到了提高,导致此问题的。

最后在http://www.debian-administration.org/articles/152找到了问题的答案。

或者不使用publickey登录,使用密码登录,要确认PasswordAuthentication该选项设置成 yes。

我的问题在于我的home目录属性发生了变化,即别人也可以写,导致安全检查无法通过。
修复过程:
1、直接到机房登录服务器,修改PasswordAuthentication为yes。
2、重启SSH服务,客户端生成RSA:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub username@myserver
cd
chmod 700 .ssh
cd /home
chmod 700 myhome