Shell scripts are an indispensable part of any system administrators toolkit. Generally in most environments there would be a bastion host which would have connectivity to the rest of the hosts in the infrastructure.
So, you've created a couple of good scripts to automate some routine tasks but copying the script to every server & then logging into that server & executing the command or copying the script & then running the script over ssh from the bastion hosts can get time consuming thereby making them less efficient.
The conventional & common way would be to copy the script & then run it over ssh like the following example:
[sahil@cserver ~]$ scp a.sh cwork:~
sahil@cwork's password:
a.sh 100% 46 0.0KB/s 00:00
[sahil@cserver ~]$ ssh cwork 'sudo ./a.sh'
sahil@cwork's password:
sudo: sorry, you must have a tty to run sudo
[sahil@cserver ~]$ ssh -tt cwork 'sudo ./a.sh'
sahil@cwork's password:
Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009717d
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 20971519 9972736 8e Linux LVM
Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-root: 9135 MB, 9135194112 bytes, 17842176 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Nov 11 15:04:44 cwork systemd: Created slice user-1001.slice.
Nov 11 15:04:44 cwork systemd: Starting Session 546 of user sahil.
Nov 11 15:04:44 cwork systemd: Started Session 546 of user sahil.
Nov 11 15:04:44 cwork systemd-logind: New session 546 of user sahil.
Nov 11 15:04:44 cwork systemd-logind: Removed session 546.
Nov 11 15:04:53 cwork systemd: Created slice user-1001.slice.
Nov 11 15:04:53 cwork systemd: Starting Session 547 of user sahil.
Nov 11 15:04:53 cwork systemd: Started Session 547 of user sahil.
Nov 11 15:04:53 cwork systemd-logind: New session 547 of user sahil.
Nov 11 15:04:53 cwork kernel: end_request: I/O error, dev fd0, sector 0
Connection to cwork closed.
So, you've created a couple of good scripts to automate some routine tasks but copying the script to every server & then logging into that server & executing the command or copying the script & then running the script over ssh from the bastion hosts can get time consuming thereby making them less efficient.
The conventional & common way would be to copy the script & then run it over ssh like the following example:
[sahil@cserver ~]$ scp a.sh cwork:~
sahil@cwork's password:
a.sh 100% 46 0.0KB/s 00:00
[sahil@cserver ~]$ ssh cwork 'sudo ./a.sh'
sahil@cwork's password:
sudo: sorry, you must have a tty to run sudo
[sahil@cserver ~]$ ssh -tt cwork 'sudo ./a.sh'
sahil@cwork's password:
Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009717d
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 20971519 9972736 8e Linux LVM
Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-root: 9135 MB, 9135194112 bytes, 17842176 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Nov 11 15:04:44 cwork systemd: Created slice user-1001.slice.
Nov 11 15:04:44 cwork systemd: Starting Session 546 of user sahil.
Nov 11 15:04:44 cwork systemd: Started Session 546 of user sahil.
Nov 11 15:04:44 cwork systemd-logind: New session 546 of user sahil.
Nov 11 15:04:44 cwork systemd-logind: Removed session 546.
Nov 11 15:04:53 cwork systemd: Created slice user-1001.slice.
Nov 11 15:04:53 cwork systemd: Starting Session 547 of user sahil.
Nov 11 15:04:53 cwork systemd: Started Session 547 of user sahil.
Nov 11 15:04:53 cwork systemd-logind: New session 547 of user sahil.
Nov 11 15:04:53 cwork kernel: end_request: I/O error, dev fd0, sector 0
Connection to cwork closed.
But what if I don't wan to copy it over & run the script locally & execute the script content on the remote host.
Here's how to get it done:
[sahil@cserver ~]$ ssh -tt cwork 'sudo bash -s ' < ./a.sh
sahil@cwork's password:
#!/bin/bash
fdisk -l
tail /var/log/messages
[root@cwork sahil]# #!/bin/bash
[root@cwork sahil]#
[root@cwork sahil]# fdisk -l
Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0009717d
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 20971519 9972736 8e Linux LVM
Disk /dev/mapper/centos-swap: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mapper/centos-root: 9135 MB, 9135194112 bytes, 17842176 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@cwork sahil]#
[root@cwork sahil]# tail /var/log/messages
Nov 11 14:41:09 cwork systemd: Created slice user-1001.slice.
Nov 11 14:41:09 cwork systemd: Starting Session 540 of user sahil.
Nov 11 14:41:09 cwork systemd: Started Session 540 of user sahil.
Nov 11 14:41:09 cwork systemd-logind: New session 540 of user sahil.
Nov 11 14:41:09 cwork systemd-logind: Removed session 540.
Nov 11 14:41:19 cwork systemd: Created slice user-1001.slice.
Nov 11 14:41:19 cwork systemd: Starting Session 541 of user sahil.
Nov 11 14:41:19 cwork systemd: Started Session 541 of user sahil.
Nov 11 14:41:19 cwork systemd-logind: New session 541 of user sahil.
Nov 11 14:41:19 cwork kernel: end_request: I/O error, dev fd0, sector 0
[root@cwork sahil]# ^CKilled by signal 2.
The only flaw here is that you have to press ctrl+c to terminate the script & logout of the remote server.
But I was able to come up with a workaround for this. I just added an exit command in my script to log out once the script gets executed.
Here is the script content:
[sahil@cserver ~]$ cat a.sh
#!/bin/bash
fdisk -l
tail /var/log/messages
exit
[sahil@cserver ~]$
No comments:
Post a Comment