Bootstrap

服务器免密码传输文件,CentOS7,使用 scp 命令, ssh 连接方式,免密码传输文件到远程服务器,免密执行远程服务器上的 shell 脚本...

如题

如果提示:-bash: scp: command not found, 执行下面的命令安装:1

yum install -y openssh-clients

免密码配置通常用 scp 命令通过 ssh 获取对方 linux 主机文件的时候都需要输入密码确认,不过通过建立信任关系,可以实现不输入密码。

建立的信任关系可在两台服务器的任何用户之间,下面的示例,两台服务器的用户都是 root,实际操作时,把 root 换成你的真实用户名即可。

假设:传输文件的服务器 S(source)的 IP:192.168.1.100

接收文件的服务器 T(target)的 IP:192.168.1.101

目标:从服务器 S 免密码传文件至服务器 T

操作步骤如果 T 的 ~/.ssh/ 目录不存在,就手动创建,mkdir -p ~/.ssh。

在服务器 S 上执行命令 ssh-keygen -t rsa 来生成密钥,一路回车就行了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

[root@localhost ~]# 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:

SHA256:7EM99i0eL03+glViCN0cn+9ELeM8J2sLyvDW26SaB/g [email protected]

The key's randomart image is:

+---[RSA 2048]----+

| . o.. |

| . . o.o|

| . .o.+|

| . . .oo+o|

| S.+ .=o+|

| o...o .oB |

| +. o=*= .|

| =E+=X+. |

| .*o+o+o.|

+----[SHA256]-----+

将服务器 S /root/.ssh/ 目录中的 id_rsa.pub 文件内容复制到服务器 T /root/.ssh/ 目录下的 authorized_keys 文件中,注意是文件内容:

如果 T 的 /root/.ssh/ 目录下没有 authorized_keys 文件,就上传并改名为 authorized_keys:scp .ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys

如果 T 的 ~/.ssh/ 目录已经存在 authorized_keys 文件,用 cat >> 命令将公钥文件 id_rsa.pub 的内容添加进去,文件 authorized_keys 是可以包含多个 SSH 验证信息的。在服务器 S 上执行 scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/s.pub

在服务器 T 上执行 cat ~/.ssh/s.pub >> ~/.ssh/authorized_keys

以后从服务器 S 通过 scp 传文件到服务器 T 就不需要密码了。

注意

这种方式传文件,如果目标服务器的目标文件夹下存在同名文件,会在没有任何提示的情况下被覆盖掉。

上传下载上传本地文件到服务器:scp /path/filename username@servername:/path/

上传整个目录到服务器:scp -r local_dir username@servername:remote_dir

从服务器上下载文件:scp username@servername:/path/filename /var/www/local_dir

从服务器下载整个目录:scp -r username@servername:/var/www/remote_dir/ /var/www/local_dir

执行远程服务器上的 shell 脚本

语法

ssh + 建立好信任关系的用户名 @ 远程服务器 IP 地址 + “第一个 shell 指令; 另一个 shell 指令”,如:ssh utomcat@IP "cd ~/tomcat/dev/job ; ls -l --color=auto"

如果指令不止一个,必须要加双引号,否则,除了第一个指令,其余指令将会在本地执行。

两个指令之间用分号隔开。

示例一:查看远程服务器文件列表

远程服务器上的 ~/tomcat/dev/job 为 tomcat 目录:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

[utomcat@localhost logs]$ ssh [email protected] "cd ~/tomcat/dev/job ; ls -l --color=auto"

total 128

drwxr-x---. 3 utomcat gtomcat 4096 Aug 17 23:43 bin

-rw-r-----. 1 utomcat gtomcat 18982 Aug 17 23:43 BUILDING.txt

drwxr-x---. 3 utomcat gtomcat 18 Aug 17 23:43 C:

drwx------. 3 utomcat gtomcat 254 Aug 17 23:44 conf

-rw-r-----. 1 utomcat gtomcat 5407 Aug 17 23:43 CONTRIBUTING.md

drwxr-x---. 2 utomcat gtomcat 4096 Aug 17 23:43 lib

-rw-r-----. 1 utomcat gtomcat 57092 Aug 17 23:43 LICENSE

drwxr-x---. 2 utomcat gtomcat 4096 Sep 3 09:30 logs

-rw-r-----. 1 utomcat gtomcat 2333 Aug 17 23:43 NOTICE

-rw-r-----. 1 utomcat gtomcat 3255 Aug 17 23:43 README.md

-rw-r-----. 1 utomcat gtomcat 6852 Aug 17 23:43 RELEASE-NOTES

-rw-r-----. 1 utomcat gtomcat 16262 Aug 17 23:43 RUNNING.txt

drwxr-x---. 2 utomcat gtomcat 30 Aug 17 23:43 temp

drwxr-x---. 7 utomcat gtomcat 81 Aug 17 23:43 webapps

drwxr-x---. 3 utomcat gtomcat 22 Sep 2 09:57 work

示例二:执行远程服务器上的 shell 脚本文件并同步监听 tomcat 日志远程服务器上的脚本文件 reBuildAndRestartTomcatAndTailLog.sh 作用是获取 java 项目最新代码并重新编译,编译完成之后重启 tomcat 并监听 tomcat 日志变化。

先在远程服务器终端执行 tail -f ~/tomcat/logs/catalina.out 监听 tomcat 日志,观察 tomcat 是否会被重启。

然后,在本地服务器的终端执行:ssh [email protected] "~/shell/reBuildAndRestartTomcatAndTailLog.sh"。

执行结果,远程服务器的日志文件 catalina.out 已经开始有变化了,从变化看,tomcat 正在重启,同时,本地终端也同步显示了此日志的变化情况,如下图:

ddf902a9f83fba70f4f67c89a8f6cbb0.png

;