SSH

常用命令

  1. SSH登录时指定私钥

    1
    ssh username@ip -i ./xxx/privateKey -p prot
  2. SSH代理

1
ssh -N -L -f 0.0.0.0:3306:127.0.0.1:3306 user@host
  • -N 只发送数据不连接
  • -L 映射 localhost:localport:remotehost:remoteport 代理主机
  • -f 后台运行

经过本机3306端口的流量都经user@host机器转发到127.0.0.1:3306上去

配置

在.ssh文件夹下新建config文件,示例:

1
2
3
4
5
6
7
8
9
10
11
12
Host www
HostName 192.168.1.111
Port 50
User root
IdentityFile ~/.ssh/id_rsa_2048

# git指定私钥
Host api
HostName api.domain.com
User git
Port 22
IdentityFile ~/.ssh/git_id_rsa

访问的时候只需运行ssh www就能访问192.168.1.111服务器了

SSH配置

/etc/ssh/sshd_config

  1. 禁止密码登录

    vim /etc/ssh/sshd_config

    1
    PasswordAuthentication no

    修改后重新加载配置

  2. 避免自动断开

    vim /etc/ssh/sshd_config

    1
    2
    3
    4
    # 60s 一次心跳
    ClientAliveInterval 60
    # 5 次失败后自动段考
    ClientAliveCountMax 5

    修改后重新加载配置

常见问题

  1. 已经在authorized_keys加入过publicKey,但是还是要求输入密码。

    权限问题,一般.ssh目录的文件权限为600

    1
    2
    chmod 600 authorized_keys
    restorecon -r -vv /root/.ssh
  2. ssh-copy-id 命令
    ssh-copy-id命令可以把本地主机的公钥复制到远程主机的 authorized_keys 文件上,ssh-copy-id 命令也会给远程主机的用户主目录(home)和 ~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。

    1
    2
    ssh-copy-id user@server
    ssh-copy-id -i ~/.ssh/id_rsa.pub user@server
  3. sshpass 输入密码
    ssh 登录时不能指定密码,有时间很不方便。使用 sshpass 可以来处理这个问题。

    1
    sshpass -p 'passwd' ssh user@domain
  4. 连接自动断开
    修改/etc/ssh/sshd_config ClientAliveIntervalClientAliveInterval参数

    1
    2
    3
    4
    # 指定了服务器端向客户端请求消息的时间间隔。默认是0,不发送,而ClientAliveInterval 60表示每分钟发送一次。
    ClientAliveInterval 60
    # ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开。
    ClientAliveCountMax 3

参考

本站采用「署名 4.0 国际」进行许可。