一、不需要密码登陆
1、客户端(station3.example.com)生成公钥和私钥
[root@station3 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
2d:8d:55:92:82:21:41:23:34:7b:69:04:8a:d5:23:69 [email protected]
[root@station3 ~]#ls .ssh
id_rsa id_rsa.pub
2、将公钥复制给ssh服务器(station2.example.com)
[root@station3 .ssh]# ssh-agent bash
#开启bash环境下ssh代理
[root@station3 .ssh]# ssh-copy-id -i id_rsa.pub [email protected]
#将公钥复制给服务器,服务器会在其相关用户的home目录下生成.ssh/authorized_keys文件,该文件中包含有客户端上传公钥内容
3、在客户端保存证书密码
[root@station3 .ssh]# ssh-add
Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
#证书密码是为保证证书的安全,客户端保存证书密码后登陆服务器时就无需输入证书密码
二、通过ssh端口转发为其他服务提供加密隧道
1、端口转发命令格式
ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -D listen_port user@Tunnel_Host
2、相关参数解释
相关参数的解释:
-f Fork into background after authentication.
后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
-D port
指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.
-C Enable compression.
压缩数据传输。
-N Do not execute a shell or command.
不执行脚本或命令,通常与-f连用。
-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。注:这个参数基本不起作用
3、实例
环境:在station3.example.com(192.168.32.33)上通过访问本机的2022端口转发访问station2.exmaple.com(192.168.32.32)的ssh服务
l 将发往本机station3的2022端口访问转发给station2的22端口:
[root@station3 ~]# ssh -CNfg -L 2022:localhost:22 [email protected]
Welcome !!!!
Enter passphrase for key '/root/.ssh/id_rsa':
bind: Address already in use
[root@station3 ~]# ssh localhost -p 2022
Welcome !!!!
Enter passphrase for key '/root/.ssh/id_rsa':
Last login: Fri Mar 25 17:36:46 2011 from station2.example.com
Banner!!!!
[root@station2 ~]#
l 将发往station3的2022端口访问转发给本机station2的22端口
[root@station2 .ssh]# ssh -CNfg -R 2022:localhost:22 192.168.32.33
[email protected]'s password:
#该命令运行在服务器端
[root@station3 ~]# ssh localhost -p 2022 #客户端测试
Welcome !!!!
Enter passphrase for key '/root/.ssh/id_rsa':
Last login: Fri Mar 25 17:39:26 2011 from station2.example.com
Banner!!!!
[root@station2 ~]#
# SSH中端口转发绑定的是 lookback 接口,这意味着只有 localhost 或者 127.0.0.1 才能使用本机的端口转发 , 其他机器发起的连接只会得到“ connection refused. ”。