shell脚本-linux如何在脚本中远程到一台linux机器并执行命令

时间:2024-07-17 07:22:48

需求:我们需要从11.0.1.17远程到11.0.1.16上执行命令

实现:

1.让11.0.1.17 可以免密登录到11.0.1.16

[root@localhost ~]# ssh-keygen
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:bu287XmVZ6enpUciggpz71Q7e5kfKYqVMTcM5bDD8eU root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|          o . .  |
|         . B o   |
|          = o E  |
|           +     |
|        S.+ +   .|
|    o ...o.*...o*|
|     + o+ *..+o*+|
|      .o.= =+oo+o|
|       .o *++o++ |
+----[SHA256]-----+

[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub root@11.0.1.16
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
The authenticity of host '11.0.1.16 (11.0.1.16)' can't be established.
ECDSA key fingerprint is SHA256:Zedce2a7sFWF3pYJaVtedqST+SsG1zbPZ7Y4rGiEpB0.
ECDSA key fingerprint is MD5:57:75:f6:6f:68:ba:b2:b8:38:0f:55:96:c9:19:d6:29.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@11.0.1.16's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@11.0.1.16'"
and check to make sure that only the key(s) you wanted were added.


2.在脚本中实现我们想要的功能

[root@localhost ~]# cat test.sh 
#!/bin/bash
ssh root@11.0.1.16 <<remotessh
mkdir test
ls -la test
ifconfig
exit
remotessh


[root@localhost ~]# sh test.sh 
Pseudo-terminal will not be allocated because stdin is not a terminal.
总用量 4
drwxr-xr-x  2 root root    6 7月  15 09:38 .
dr-xr-x---. 8 root root 4096 7月  15 09:38 ..
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.0.1.16  netmask 255.255.255.0  broadcast 11.0.1.255
        inet6 fe80::20c:29ff:fe00:9681  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:00:96:81  txqueuelen 1000  (Ethernet)
        RX packets 95760  bytes 67679836 (64.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 45061  bytes 3990000 (3.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 24  bytes 2547 (2.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24  bytes 2547 (2.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0