OpenSSH

http://www.openssh.com/

windows上支持ssh协议的客户端:

  • putty
  • xshell
  • MobaXterm
  • secureCRT

安装:

1
2
$ sudo apt-get install openssh-server
$ sudo apt-get install openssh-client

SSH命令

ssh是openssh协议的客户端.

远程操作的命令包括ssh, scp, sftp.

ssh

1
2
3
$ ssh
# 远程执行命令需要用双引号,不能用单引号
$ ssh username@host "command/script"

scp

1
$ scp

sftp

1
$ sftp

常用选项:

1
2
3
4
-C   compression
# 不需要输入yes来交互, 或者修改/etc/ssh/ssh_config
-o StrictHostKeyChecking=no
-o UserKnownHostsFile /dev/null

ssh也包括一些密钥管理的命令.

ssh-keygen

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ ssh-keygen -t rsa -C 'canuxcheng@gmail.com'

# 通过将本机的公钥拷贝到远程机器实现无密码访问.
# 将本机的public-key拷贝到远程机器的authorized_keys.
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote
# 另外的拷贝方法
$ ssh user@host "cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
$ sudo service ssh restart # 需要重启ssh服务

非交互式通过命令行传密码的命令:
$ sshpass -p [password]

ssh-add

ssh-keysign

ssh-keyscan


启用root远程ssh

1
2
3
4
5
6
$ sudo -i
# passwd root
# vim /etc/ssh/sshd_config
> PermitRootLogin prohibit-password
> PermitRootLogin yes
# service ssh restart

ssh tunel

SSH Tunnel有三种

  • 本地Local(ssh -NfL), 在ssh client(本地)执行.

    1
    2
    3
    4
    
    正向代理:(a能ssh到b,b能访问c,实现a访问c,相当于a是ssh client)A 通过 中转B连接 server C.
    
    在A 上建立tunnel:
    ssh -Nf -L  ssh-client-ip:ssh-client-port:remoteServerIp:remoteServerPort  user@agentIp

    访问ssh-client-ip/A的ssh-client-port 即可访问 remoteServerIp/C 的 remoteServerPort 提供的服务.

  • 远程Remote(ssh -NfR), 在ssh server执行.

    1
    2
    3
    4
    5
    6
    
    反向代理:(b能ssh到a,b能访问c,实现a访问c, a相当于ssh server, c相当于remote server) A 通过中转B访问server C.
    
    在B上建立tunnel:
    ssh -Nf -R  ssh-server-ip:ssh-server-port:remoteServerIp:remoteServerPort    user@agent
    
    访问ssh-server-ip/A的ssh-server-port端口即可访问remoteServerIp/C 的 remoteServerPort 提供的服务。
  • 动态Dynamic(ssh -NfD)

    1
    2
    3
    4
    5
    6
    
    socks代理: a能ssh到B,b能访问一个网段,实现a访问该网段.
    
    在a上建立tunnel
    ssh -D [ssh-client-ip]:ssh-client-port user@agent
    
    socks代理配置ssh-client-ip:ssh-client-port 即可通过B访问该网段。