2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > linux主机之间使用密钥对无密码登录/SCP无密码拷贝服务器文件

linux主机之间使用密钥对无密码登录/SCP无密码拷贝服务器文件

时间:2024-02-13 18:49:55

相关推荐

linux主机之间使用密钥对无密码登录/SCP无密码拷贝服务器文件

一、使用密钥对无密码登录Linux服务器

1. 用ssh-keygen生成密钥对

为了减少文件移动操作,建议在客户端操作。

ssh-keygen -t rsa

建议不要输入密码passphrase, 一直按enter就好了。

如果不指定文件名,会生成 id_rsa(私钥), id_rsa.pub(公钥)两个文件。

Tips:

注意,如果这里指定了密钥文件名,需要使用-i参数指定密钥文件名去登录,不然会出现“Permission denied (publickey)”错误。 也可以使用配置文件 ~/.ssh/config进行配置,见本文后面。

2 将上面生成的公钥追加到主服务器~/.ssh/authorized_keys文件

推荐通过ssh的工具套装ssh-copy-id操作,也可以使用ftp工具/scp命令。

# ssh-copy-id方式,注意-i参数指定的是私钥文件名。# 会自动生成公钥追加到服务器上的authorized_keys文件中。可能你需要输入服务器的密码。ssh-copy-id -i ~/.ssh/id_rsa user@serverA# 也可以用熟悉的scp/ftp等方式,不过需要两个步骤,还要登录服务器,要麻烦很多。scp id_rsa.pub user@serverA:~/.ssh/id_rsa.pubcat id_rsa.pub >> ~/.ssh/authorized_keys

复制后id_rsa.pub可删除掉。

3. 设置恰当的文件夹权限

登录主机,如下设置恰当的文件夹权限并用ll命令确认。

chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys# 设置多个用户时,注意用户的home目录权限不能太高,否则会导致不能登录。最高755,建议700sudo chmod 755 /home/username

注意:如果不设置正确的文件/文件夹权限,登录时会出现密钥未注册的错误。

如果想探究出错原因,参考Xshell “所选的用户密钥未在远程主机上注册,请再试一次”SSH 登录远程linux服务器(良心整理)

4. 设置密钥登录功能

4.1 修改设置

编辑/etc/ssh/sshd_config 文件,进行如下设置:

# 注意 Ubuntu 20之后,RSAAuthentication和PubkeyAuthentication 即使没有设置,也是默认yes的。RSAAuthentication yesPubkeyAuthentication yes# root 用户需要注意能否通过 SSH 登录:PermitRootLogin yes

4.2 重启ssh服务

sudo service sshd restart

4.3 验证设置是否正确

ssh user@[服务器A地址]

如果不需要输入密码实现远程ssh登录,说明设置正常完成。

Tips:

以密钥方式登录成功后,建议在/etc/ssh/sshd_config中禁用密码登录,以增强服务器安全性:

PasswordAuthentication no

5. 简化密钥登录–密钥对登录进阶版

如果使用了自定义的密钥文件文件名,或者使用了多个密钥对,或者用了其它SSH端口,还是建议使用配置文件来操作,让主机登录更加方便简单。

5.1 配置文件格式

1)文件名及位置

配置文件位置和文件名是固定的:~/.ssh/config

2)文件内容

格式如下,文件里面可以指定多个登录名。

Host {登录名}Hostname {主机名或者IP}User {登录用户名}Port {端口,不指定的话默认22}IdentityFile {不指定的话默认为:~/.ssh/id_rsa}ServerAliveInterval {向对象主机多长时间间隔发送信号以保持持续的连接,默认0,不发信号}

例子

Host devChiaHostName 192.168.2.9User chiaPort 22IdentityFile ~/.ssh/id_rsa_P2_db_ServerAliveInterval 60Host xxxserverHostName ssh123.xxxserver.jpUser xxxserver-abcxyzPort 2222IdentityFile ~/.ssh/id_rsa

5.2 登录方法

# 格式: ssh SSH主机# 例子:ssh devChia# 退出登录主机exit

6. 问题处理

6.1 用-vT参数输出详细日志

如果不能正常连接到对象主机,使用下列命令查看详细日志,找到问题原因。比如连接时出现了Permission denied (publickey)错误。如下输出详细日志:

# 例子:ssh -vT devChiassh -vT -i ~/.ssh/id_rsa_002 user2@host1

输出例子:

$ ssh -vT user1@192.168.2.17OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar debug1: Reading configuration data /etc/ssh/ssh_configdebug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no filesdebug1: /etc/ssh/ssh_config line 21: Applying options for *debug1: Connecting to 192.168.2.17 [192.168.2.17] port 22.debug1: Connection established.debug1: identity file /home/chia/.ssh/id_rsa type 0debug1: identity file /home/chia/.ssh/id_rsa-cert type -1debug1: identity file /home/chia/.ssh/id_dsa type -1debug1: identity file /home/chia/.ssh/id_dsa-cert type -1debug1: identity file /home/chia/.ssh/id_ecdsa type -1debug1: identity file /home/chia/.ssh/id_ecdsa-cert type -1debug1: identity file /home/chia/.ssh/id_ecdsa_sk type -1debug1: identity file /home/chia/.ssh/id_ecdsa_sk-cert type -1debug1: identity file /home/chia/.ssh/id_ed25519 type -1debug1: identity file /home/chia/.ssh/id_ed25519-cert type -1debug1: identity file /home/chia/.ssh/id_ed25519_sk type -1debug1: identity file /home/chia/.ssh/id_ed25519_sk-cert type -1debug1: identity file /home/chia/.ssh/id_xmss type -1debug1: identity file /home/chia/.ssh/id_xmss-cert type -1debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5debug1: Remote protocol version 2.0, remote software version OpenSSH_8.2p1 Ubuntu-4ubuntu0.5debug1: match: OpenSSH_8.2p1 Ubuntu-4ubuntu0.5 pat OpenSSH* compat 0x04000000debug1: Authenticating to 192.168.2.17:22 as 'nftdigger'debug1: SSH2_MSG_KEXINIT sentdebug1: SSH2_MSG_KEXINIT receiveddebug1: kex: algorithm: curve25519-sha256debug1: kex: host key algorithm: ecdsa-sha2-nistp256debug1: kex: server->client cipher: chacha20-poly1305@ MAC: <implicit> compression: nonedebug1: kex: client->server cipher: chacha20-poly1305@ MAC: <implicit> compression: nonedebug1: expecting SSH2_MSG_KEX_ECDH_REPLYdebug1: Server host key: ecdsa-sha2-nistp256 SHA256:w6NV9hj/avlBdUFUJYeE7q/OzN6UAP5khoUgFJFTV+Mdebug1: Host '192.168.2.17' is known and matches the ECDSA host key.debug1: Found key in /home/chia/.ssh/known_hosts:8debug1: rekey out after 134217728 blocksdebug1: SSH2_MSG_NEWKEYS sentdebug1: expecting SSH2_MSG_NEWKEYSdebug1: SSH2_MSG_NEWKEYS receiveddebug1: rekey in after 134217728 blocksdebug1: Will attempt key: /home/chia/.ssh/id_rsa RSA SHA256:GbYXlP1n9XOue+8ublJwr7gmYnjHtEuQ/k71roOxl/Idebug1: Will attempt key: /home/chia/.ssh/id_dsa debug1: Will attempt key: /home/chia/.ssh/id_ecdsa debug1: Will attempt key: /home/chia/.ssh/id_ecdsa_sk debug1: Will attempt key: /home/chia/.ssh/id_ed25519 debug1: Will attempt key: /home/chia/.ssh/id_ed25519_sk debug1: Will attempt key: /home/chia/.ssh/id_xmss debug1: SSH2_MSG_EXT_INFO receiveddebug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,sk-ssh-ed25519@,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@>debug1: SSH2_MSG_SERVICE_ACCEPT receiveddebug1: Authentications that can continue: publickeydebug1: Next authentication method: publickeydebug1: Offering public key: /home/chia/.ssh/id_rsa RSA SHA256:GbYXlP1n9XOue+8ublJwr7gmYnjHtEuQ/k71roOxl/Idebug1: Authentications that can continue: publickeydebug1: Trying private key: /home/chia/.ssh/id_dsadebug1: Trying private key: /home/chia/.ssh/id_ecdsadebug1: Trying private key: /home/chia/.ssh/id_ecdsa_skdebug1: Trying private key: /home/chia/.ssh/id_ed25519debug1: Trying private key: /home/chia/.ssh/id_ed25519_skdebug1: Trying private key: /home/chia/.ssh/id_xmssdebug1: No more authentication methods to try.nftdigger@192.168.2.17: Permission denied (publickey).

看上述详细日志倒数第二行,No more authentication methods to try.说明当前密钥文件在对象主机没有匹配的公钥文件。

6.2 验证密钥文件对应的公钥内容

使用-y 参数,可以输出私钥文件对应的公钥内容。-f选项指定私钥文件名。本选项可以验证密钥对公私钥是否配对。

格式:ssh-keygen -y -f {私钥文件名}

# 例子:ssh-keygen -y -f id_rsa_P2_db_

二、SCP无密码拷贝服务器文件

一旦按照第一节完成密钥对登录服务器操作之后,就可以方便使用scp命令无密码存取操作主服务器的文件了。

scp @[host]:/source_path/source_file /local_path/# 或者scp [登录名]:/source_path/source_file /local_path/

附录:通过脚本自动升级程序

#!/bin/sh# 杀死所有正运行程序pid=`ps -ef | grep need_upgrade_process | grep -v 'grep' | awk '{print $2}'`echo $pidfor id in $piddokill -9 $idecho "killed $id"doneecho '杀死了所有相关程序'# 从主服务器复制最新版程序到本地指定目录scp [host]:/source_path/source_file /local_path/cd /local_path# 后台启动nohup ./need_upgrade_process &echo '启动完成'ps -ef|grep need_upgrade_process

参考:

ssh 免密码登录 实现scp跨服务器拷贝文件ssh-keygen之后,生成的密码都叫id_rsa.pub,我想改名不行吗?ssh官网文档–ssh-keygenssh官网帮助–config文件

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。