Secure Shell(SSH)是一种用于在因特网上建立安全连接的协议。在Debian操作系统中,有一个免费的SSH版本称为OpenSSH,它在openssh-client和openssh-server软件包中提供。OpenSSH是一个功能强大且广泛使用的开源工具集,提供了加密的远程登录、文件传输和隧道功能。
对于用户来讲, ssh(1) 功能比telnet(1) 更加智能和安全. 不像 telnet命令, ssh 命令不会在遇到 telnet 的退出字符(初始默认是 CTRL-])时停止.
服务器远程访问和工具列表:
软件包 | 流行度 | 大小 | 工具 | 说明 |
---|---|---|---|---|
openssh-client |
V:868, I:996 | 5821 | ssh (1) |
SSH 客户端 |
openssh-server |
V:733, I:819 | 1955 | sshd (8) |
SSH 服务端 |
ssh-askpass |
I:23 | 102 | ssh-askpass (1) |
请求用户输入 ssh-add 密码 (简单的 X) |
ssh-askpass-gnome |
V:0, I:3 | 199 | ssh-askpass-gnome (1) |
请求用户输入 ssh-add 密码 (GNOME) |
ssh-askpass-fullscreen |
V:0, I:0 | 48 | ssh-askpass-fullscreen (1) |
请求用户输入 ssh-add 密码 (GNOME),有更好看的界面 |
shellinabox |
V:0, I:1 | 507 | shellinaboxd (1) |
浏览器访问 VT100 终端模拟器 网页服务器 |
虽然 shellinabox 不是一个 SSH 程序,它列在这里作为远程终端访问的一个有趣的替代.
一、SSH基础
OpenSSH SSH 后台守护进程(daemon)只支持 SSH 2协议。
注意:
- 如果想要运行 OpenSSH 服务,”/etc/ssh/sshd_not_to_be_run”必须不存在;
- 不要打开基于 rhost 的认证( /etc/ssh/sshd_config 中的 HostbasedAuthentication )。
SSH 配置文件列表:
配置文件 | 配置文件描述 |
---|---|
/etc/ssh/ssh_config |
SSH 客户端默认, |
/etc/ssh/sshd_config |
SSH 服务端默认 |
~/.ssh/authorized_keys |
该账户连接到这个服务器上的客户端使用的默认 SSH 公钥 |
~/.ssh/id_rsa |
用户的 SSH-2 RSA 私钥 |
~/.ssh/id_key-type-name |
用户的 SSH-2 密钥, key-type-name 为 ecdsa 、 ed25519 等 |
从客户端启动一个 ssh(1) 连接.
SSH 客户端启动例子列表:
命令 | 说明 |
---|---|
ssh username@hostname.domain.ext |
使用默认模式连接 |
ssh -v username@hostname.domain.ext |
有详细信息的默认连接模式 |
ssh -o PreferredAuthentications=password username@hostname.domain.ext |
SSH 2 版本,强制使用密码 |
ssh -t username@hostname.domain.ext passwd |
在远程主机上运行 passwd 命令来更新密码 |
二、远程主机用户名
如果在本地和远程主机上使用相同的用户名,能够省略输入”username@”。
即使在本地和远程主机使用不同的用户名,可以使用 “~/.ssh/config” 来省略输入用户名.对于 Debian Salsa 服务器,使用账户名 “foo-guest”,可以设置 “~/.ssh/config” 包含下面的内容。
Host salsa.debian.org people.debian.org User foo-guest
三、免密码远程连接
使用”PubkeyAuthentication” (SSH-2 协议),人们可以避免记住远程系统的密码。在远程系统的”/etc/ssh/sshd_config”里,设置相应的条目, “PubkeyAuthentication yes”;在本地生成授权秘钥对,并安装公钥到远程系统。
$ ssh-keygen -t rsa $ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys"
可以在 “~/.ssh/authorized_keys” 里给条目增加选项来限制主机和运行特定的命令
四、处理其它SSH客户端
其它平台上有一些免费的 SSH 客户端。
其它平台上免费 SSH 客户端列表:
环境 | 免费 SSH 程序 |
---|---|
Windows | puTTY (PuTTY: a free SSH and Telnet client) (GPL) |
Windows (cygwin) | SSH in cygwin (Cygwin: Get that Linux feeling – on Windows) (GPL) |
Mac OS X | OpenSSH;在终端应用中使用 ssh (GPL) |
五、建立ssh代理
用密码来保护 SSH 认证私钥是安全的。如果密码没有设置,使用 “ssh-keygen -p” 来设置。把公钥 (比如:”~/.ssh/id_rsa.pub”) 放到远程主机的”~/.ssh/authorized_keys”,这个远程主机使用上面描述的基于密码的连接方式。
$ ssh-agent bash $ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/username/.ssh/id_rsa: Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
从这里执行接下来的命令,就不再需要密码。
$ scp foo username@remote.host:foo
按 ^D 来终结 ssh 代理会话。对于 X 服务端,通常的 Debian 启动脚本会作为父进程执行 ssh-agent。所以只需要执行一次 ssh-add。进一步的信息,请阅读 ssh-agent(1) 和 ssh-add(1).
六、远程主机发送邮件
如果在一个正确设置 了DNS 的服务器上有一个 SSH shell 账号,能够将在本地工作站上生成的邮件,作为远程服务器上的邮件,真正的从远程服务器上发送。
$ ssh username@example.org /usr/sbin/sendmail -bm -ti -f "username@example.org" < mail_data.txt
七、SMTP/POP3端口转发
通过 ssh 建立一个这样的管道连接,从 localhost 的 4025 端口到 remote-server 的 25 端口,并从 localhost 的 4110 端口到 remote-server 的 110 端口,请在本机执行如下命令.
# ssh -q -L 4025:remote-server:25 4110:remote-server:110 username@remote-server
这是跨越因特网建立 SMTP/POP3 服务连接的安全方法。在远程主机”/etc/ssh/sshd_config”里设置”AllowTcpForwarding”条目为 “yes”.
八、SSH关闭远程系统
可以使用 at(1) 命令来从 SSH 终端里保护”shutdown -h now”操作过程。
# echo "shutdown -h now" | at now
在 screen(1) 会话里运行 “shutdown -h now”,是另外一个方法来做这同样的事情。
九、SSH故障排查
- 如果遇到问题,检查配置文件的权限并用 “-v” 选项运行 ssh。
- 如果是 root 账户,并有使用防火墙,使用 “-p” 选项; 这可以避免使用1 — 1023 之间的服务端口.
- 如果 ssh 连接到远程站点突然停止工作,这也许是系统管理员胡乱操作的结果,可能是在系统维护时改变了 “host_key”. 在确认这个情况后,并且没有人试图用聪明的黑客技术来篡改远程主机,可以在本机 “~/.ssh/known_hosts” 里删除 “host_key” 条目来重新获得连接。