/ ssh

ssh

ssh 是一种网络协议,用于加密登录。ssh 的实现有多种,通常我们使用的是 ssh 的开源实现 openssh

https://help.github.com/articles/connecting-to-github-with-ssh/

SSH Client Software

  • OpenSSH (Linux and Mac OS X): 终端中使用 ssh 命令即可。
  • XShell(Windows)
  • PuTTY (Windows): putty.exe is the SSH client, and puttygen.exe should also be downloaded if you want to use SSH keys.

补充

ssh -p 22 username@ip

cat ~/.ssh/id_rsa.pub | ssh -p 22 bill@192.168.1.158 'mkdir -p .ssh && cat - >> ~/.ssh/authorized_keys'

Step1: 使用密钥登录 - Add Public Key Authentication (Recommended)

cd ~/.ssh
ssh-keygen -f id_git

生成密钥对:

~/.ssh/id_git - the private key, which much remain secret
~/.ssh/id_git.pub - the public key, which in theory could be broadcasted to the world

# macos 下:
brew install ssh-copy-id
# ubuntu
sudo apt-get install ssh-copy-id

# 将key写到远程机器的 ~/.ssh/authorized_key 文件中
ssh-copy-id -i pi@192.168.1.158

# 完成后直接连接
ssh pi@192.168.1.158

如果登录失败,检查服务器端 /etc/ssh/sshd_configPubkeyAuthentication yes

Step2: Disable Password Authentication (Recommended)

sudo vi /etc/ssh/sshd_config
  • Port 25000
  • PermitRootLogin no
  • PasswordAuthentication no
  • ChallengeResponseAuthentication no

保存后重启:

sudo service ssh restart

关闭密码登录后,再用 putty 连接服务器就会提示

Disconnected: No supported authentication methods available (server sent:public key)

配置文件权限问题:Bad owner or permissions on /home/user/.ssh/config

chmod 600 ~/.ssh/config

编辑本地 ssh 配置

vi ~/.ssh/config

添加如下内容:

Host s1
    HostName example.com
    Port 25000
    User pi
    IdentityFile ~/.ssh/id_git

下次链接服务器直接输入

ssh s1

查看 ssh 主机列表的命令:

alias sshhosts="grep -w -i "Host" ~/.ssh/config | sed 's/Host//'"

putty 登录设置

由于 putty 与 ssh2 的 key 文件不同,所以需要 puttygen.exe 转换一下.

  • rsa 转 ppk:选择 Conversions -> Improt key,选择 privateKey 文件,最后选择 “save private key” 将密钥保存为 .ppk 文件。
  • rsa 转 ppk:选择 Conversions -> Improt key,选择 Conversions -> Export OpenSSH key 将密钥保存为 .rsa 文件。

运行 putty,填写完 session 信息后:

  1. 到 connection -> ssh -> auth 中指定 private key
  2. 到 connection -> data 设置 auto-login username

回到 session,在 Saved Sessions 输入名称,然后点击 Save,下次使用时,点击 session 名称后,点击 Load 即可。

Server

以 root 身份登录

adduser deploy
passwd deploy
usermod -a -G wheel deploy
su - deploy

创建目录:

mkdir .ssh
vi .ssh/authorized_keys
chown -R deploy:deploy ~/.ssh
chmod 700 ~/.ssh
chmod 600 .ssh/authorized_keys

需要注意的有 3 点:

  • 粘贴进 .ssh/authorized_keys 的内容头部必须以 ssh 开头,有时粘贴进去的会缺失部分内容。
  • .ssh/authorized_keys 权限必须为 600
  • .ssh 的权限必须为 700
  • 复制的时候,务必要确保公钥的字符串是一行!可以在 vi 下使用 o 切换行来验证,否则会报Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

调试,使用参数 -v

ssh -v root@xx.xx.xx.xxx