标签归档:ssh

使用密钥自动登录ssh

比对 SSH 主机公钥是否与本机获取的一致,避免中间人攻击

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_rsa_key

编辑 ssh 配置文档

sudo vi /etc/ssh/sshd_config

Protocol 2 ← 这行表示仅使用SSH2
ServerKeyBits 768 ← 如果需要可以改成 1024 ,而 puttygen.exe 默认是1024 bit
PermitRootLogin no ← 这行表示不允许用root进行登录
PermitEmptyPasswords no ← 这行表示禁止空密码进行登录
PasswordAuthentication no ← 添加这行表示不允许密码方式的登录增加安全性,按需设置

#设置完成不要忘了 check 配置文件,使用 /usr/sbin/sshd -t 也可以

sshd -t

重启 SSH 服务前建议多保留一个会话以防不测

service sshd restart

sudo vi /etc/hosts.deny
sshd: ALL ← 添加这一行,屏蔽来自所有的SSH连接请求
sudo vi /etc/hosts.allow
sshd: 192.168.0. ← 添加这一行,只允许来自内网的SSH连接请求

下面生成公钥和私钥,在普通用户下:
ssh-keygen -t rsa ← 建立公钥与私钥
Enter file in which to save the key (/home/comet/.ssh/id_rsa): ← 钥匙的文件名,这里保持默认直接回车
Enter passphrase (empty for no passphrase): ← 输入私钥密码
Enter same passphrase again: ← 再次私钥输入密码
Your identification has been saved in /home/comet/.ssh/id_rsa ← 私钥的路径
Your public key has been saved in /home/comet/.ssh/id_rsa.pub ← 公钥的路径
cd ~/.ssh ← 进入 /home/comet/.ssh
cp id_rsa.pub authorized_keys ← 复制公钥为验证文件
chmod 400 authorized_keys ← 设置验证文件为 root 只读
复制 id_rsa 到 windows 的机器上。
使用 PUTTYGEN.EXE 转换成 putty 可以使用的。
打开 PUTTYGEN.EXE ,点击 Load,选取服务器端生成的私钥,如果上面设置了私钥密码,这里就会提示输入。修改一下 key comment,如果需要密码,可以在 key passphrase 输入并确认。
点击“Save private key”,保存为 .ppk 文件,这里是 uServer.ppk
在 putty 中使用转换后的私钥登录。
打开 putty.exe ,设置好IP,然后在 Connection - SSH - Auth 的 Private key file for authentication 中选择 uServer.ppk 。然后 open 就可以使用密钥登录而不用密码了。
如果在生成 uServer.ppk 的时候没有输入密码,那么可以在 putty.exe 的 Connection - Data 的 Auto-login username 中输入私钥的用户,那么打开 session 之后就可以自动。

参考链接
设置 SSH 通过密钥登录
SSH远程登录配置文件sshd_config详解

修改SSH端口手册

vi /etc/ssh/sshd_config

找到# Port 22Port 22,修改为

Port 22
Port 31111  # 修改为你想设置的新端口,建议在1024~65535之间

接下来测试 sshd 配置文件

sshd -t

如果没有问题就可以重启 sshd 服务了,在重启前请再次确认防火墙已经放行新的端口,SELinux 是关闭的或者相关设置也是正确的

sestatus # 确认 SELinux 的状态是 disable
service sshd restart

重启完毕后,如果新端口可以接通,就可以把 22 端口注释掉再重启服务,就完成 SSH 修改端口的操作了

参考资料
- How to change the ssh port on Linux or Unix server

建立只能使用ssh的TCP转发功能的系统账户

其实 ssh 可以连接到 sshd 但是不执行远程命令(默认是启动用户设定的 shell ),使用 -N 参数即可。

在服务器上建一个 username :
添加用户:useradd -s /bin/false  username,将用户的shell设置成/bin/false。这样用户就无法与系统进行交互。
设置密码:passwd username

小技巧:
也可以使用 /usr/bin/passwd 作为用户的 shell ,这样用户就可以通过登录而来自主修改密码。需要注意的是,需要将 /usr/bin/passwd 这一行写进 /etc/shells文件。
sshd 认证通后之后,会检查设定的 shell 是否登记在 /etc/shells 文件中,若已经登记,则fork自己,然后fork出来的子进程再exec 设定的 shell 。而 ssh 的 -N 参数,则是告诉 sshd 不需要执行 shell。

建立Tunnel:

ssh -D 1080 -qfnN    username@hostname

输入密码即可使用(也可以用key认证)。

Windows的话,可以使用plink.exe或者MyEnTunnel(MyEnTunnel 本质上也是使用plink.exe来建立Tunnel)。

此时账号username 可以通过sshd的认证使用 TcpForwarding ,但是不能运行 shell,不能与系统交互。刚好可以用来为朋友提供国外的代理翻墙。

参数详解:
-D 1080 建立动态Tunnel,监听在本地1080端口;
-q  安静模式;
-f   ssh在后台运行,即认证之后,ssh退居后台;
-n  将 stdio 重定向到 /dev/null,与-f配合使用;
-N  不运行远程程序,即通知 sshd 不运行设定的 shell。

SSH远程会话管理工具 – screen使用教程(转)

在刚接触Linux时最怕的就是SSH远程登录Linux VPS编译安装程序时远程执行的命令也被迫停止,只能重新连接,重新运行。今天就介绍一款远程会话管理工具 - screen命令。

一、screen命令是什么?

Screen是一个可以在多个进程之间多路复用一个物理终端的全屏窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。

二、如何安装screen命令?

除部分精简的系统或者定制的系统大部分都安装了screen命令,如果没有安装,CentOS系统可以执行:yum install screen ;

Debian/Ubuntu系统执行:apt-get install screen 。 继续阅读