- SSH: Execute Remote Command or Script – Linux
- SSH: Execute Remote Command
- Examples
- SSH: Run Multiple Remote Commands
- Examples
- SSH: Run Bash Script on Remote Server
- Example
- 23 Replies to “SSH: Execute Remote Command or Script – Linux”
- Запуск команд или скрипта через SSH
- Запуск команд через SSH
- Запуск нескольких команд через SSH
- Практические примеры использования SSH
- SSH: Запуск Bash Скрипта
- Удаленный запуск скрипта на сервере Linux
- Как запустить локальный скрипт на удаленном сервере Linux
- Удаленные подключения
- Беспарольные SSH-соединения
- Удаленный запуск локального скрипта
SSH: Execute Remote Command or Script – Linux
This is quite a common task for Linux system administrators, when it is needed to execute some command or a local Bash script from a one Linux workstation or a server on another remote Linux machine over SSH.
In this article you will find the examples of how to execute a remote command, multiple commands or a Bash script over SSH between remote Linux hosts and get back the output (result).
This information will be especially useful for ones, who want to create a Bash script that will be hosted locally on a one Linux machine but would be executed remotely on the other hosts over SSH.
Cool Tip: Connect to a remote SSH server without typing a password! Configure a passwordless authentication! Only 3 easy steps! Read more →
SSH: Execute Remote Command
Execute a remote command on a host over SSH:
Examples
Get the uptime of the remote server:
SSH: Run Multiple Remote Commands
Much more often it is required to send multiple commands on a remote server, for example, to collect some data for inventory and get back the result.
There are a lot of different ways of how it can be done, but i will show the most popular of them.
Run multiple command on a remote host over SSH:
$ ssh USER@HOST 'COMMAND1; COMMAND2; COMMAND3'
$ ssh USER@HOST 'COMMAND1 | COMMAND2 | COMMAND3'
Cool Tip: SSH login is too slow? This can be fixed easily! Get rid of delay during authentication! Read more →
Examples
Get the uptime and the disk usage:
$ ssh root@192.168.1.1 'uptime; df -h'
Get the memory usage and the load average:
$ ssh root@192.168.1.1 'free -m | cat /proc/loadavg'
Show the kernel version, number of CPUs and the total RAM:
SSH: Run Bash Script on Remote Server
The equally common situation, when there is some Bash script on a Linux machine and it needs to connect from it over SSH to another Linux machine and run this script there.
The idea is to connect to a remote Linux server over SSH, let the script do the required operations and return back to local, without need not to upload this script to a remote server.
Certainly this can be done and moreover quite easily.
Cool Tip: Want to ROCK? Start a GUI (graphical) application on a remote Linux workstation over SSH! Read more →
Example
Execute the local script.sh on the remote server:
23 Replies to “SSH: Execute Remote Command or Script – Linux”
Hi,
How about executing a command remotely and making sure that it will be killed once i kill my ssh session. or getting of PID of either SSH or the actual command on remote-node via a script.
Something like this I want to achieve:
Example: collecting pcap on remote addr and storing it locally.
$ ssh -t -f "tcpdump -w -" > /tmp/tcp.pcap
$ ssh ADDRESS 'echo "rootpass" | sudo -Sv && bash -s' < BASH_FILE
How do create a scrip to run commands on multiple remote machines?
When the first one gets executed, the response returned to STOUT, and the next one is not executed until I ^C the previous command.
I tried using ‘exit’ command and ‘&’ , neither is working.
Hello everyone,
I am new to linux and trying to learn it. I have task to complete “Get last 3 login details of list of linux machine with date and time.”
Is there any way to achive it? Thanks in advance
You should change these examples to use double quotes – I got tripped up putting variables in these single quotes and took me a while to realise bash treats it as a string…
como puedo hacer que solo me pida una vez la contraseña de mi servidor? hice mi escript y como realizo varias tareas me pide varias veces la contraseña
Can someone help me write a shell script to shutdown a Ubuntu computer?
I’m going to have it run on a Mac, so that it will ssh into the Ubuntu and shut it down. I need it to open Application “Terminal” then ssh name@123.45.67.89, then give it the password.
Then I need it to issue command “sudo poweroff”, and give it the password again.
I know how to do this manually by opening Mac’s Terminal. I just type in “ssh name@123.456.78.9, it asks for the password, I type it in, and it’s connected. Then I just type in “sudo poweroff” and it asks for the password again, I type it in, and bam, it shuts down the Ubunt computer.
The problem is, I need to automate this to do it at a specific time of day. On the Mac, there is what is called “Automator”, and you can set up ICalendar Events to run an “Automator Workflow” with a Shell Script. I just don’t know how to write the Shell Script to do what I can do manually? Any help is appreciated greatly!
I solved this. Here’s what works:
tell application “Terminal”
activate
do script (“ssh test@192.168.1.10“)
delay 6
do script “password” in front window
delay 7
do script “sudo poweroff” in front window
delay 5
do script “password” in front window
end tell
Why when I get a script from somewhere by curl & then pipe to bash to run it on my local server, some commands in a bash functions failed to execute, no error, no code error btw..just the called functions don’t execute.. How do I know my code is ok, because when I output it as a file from curl, I chmod and run it like ./..scriptfile.sh.. Code run fine.. Any idea and how do I resolve this?
This was very helpful for me. I am very new to this and just ordered a VPS yesterday and these guides are really helping me work my way around. I appreciate this simple resource you’ve put together!
how to run a script with sudo previllages on remote server: ssh -tt rundeck@$Batch_Host ‘ bash -s’ < /home/abhishekc/dem.sh i am getting permission denied
Запуск команд или скрипта через SSH
Сегодня рассмотрим примеры для запуска команд или скрипта через SSH соединения. Научимся запускать наши команды/скрипты из одной рабочей станции Linux на другой удаленной Linux машине. Рассмотрим практические примеры использования мощного инструмента SSH в администрировании Linux.
Запуск команд через SSH
Если вы хотите удаленно запустить какую-либо команду на сервере через SSH, то нет ничего проще. Давайте рассмотрим пару примеров.
Узнайте аптайм удаленного сервера:
Узнать проходит ли пинг на удаленном сервере до google DNS:
ssh root@10.5.5.1 'ping 8.8.8.8 -c 5'
Перезагрузить удаленную машину:
Запуск нескольких команд через SSH
В большинстве случаем недостаточно удаленно запустить только одну команду по SSH. Намного чаще необходимо отправить сразу несколько команд на удаленный сервер, например, для сбора информации и получить результат обратно.
Запустить несколько команд на удаленном хосте по SSH:
ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'КОМАНДА1; КОМАНДА2; КОМАНДА3'
Практические примеры использования SSH
Узнайте аптайм и сколько свободного места на диске:
ssh root@10.5.5.1 'uptime; df -h'
Сколько используется памяти и среднюю нагрузку:
ssh root@10.5.5.1 'free -m ; cat /proc/loadavg'
Узнать версию ядра, количество ядер CPU и сколько всего RAM:
SSH: Запуск Bash Скрипта
Также бывает ситуация, когда на Linux сервере лежит какой-либо скрипт и его необходимо запустить по SSH на другом Linux сервере.
Основная идея заключается в том, чтобы подключиться на удаленный Linux сервер, дать скрипту выполнить свою работу и получить результат, при этом не копируя сам скрипт на удаленный сервер.
Эта задаче безусловно может быть выполнена и при этом довольно просто.
Что если вы хотите выполнить сценарий с аргументом.
Если требуются привилегии sudo, то команда примет вид:
ssh root@10.5.5.1 'echo "passwords" | sudo -Sv && bash -s' < script.sh
- password — пароль для пользователя root на удаленной машине.
- script.sh — файл с вашим скриптом расположенный на станции с которой производите подключение.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
В этой статье рассмотрим пример как можно переименовать сетевые интерфейсы в дистрибутивах Linux. После обновления systemd (частью которого является udev) Читать
В этой статье я расскажу, как настроить резервное копирование с помощью ssh и cron в Linux дистрибутивов. Как нетрудно догадаться, Читать
Сегодня в статье рассмотрим опции сервиса networking в Debian подобных системах таких как Ubuntu, Linux Mint, Elementary OS и т.д. Читать
Не удалось подключиться к libvirt. Требуется установить openssh-askpass или аналогичную программу для соединения с этим узлом. Вот такое сообщение у Читать
Удаленный запуск скрипта на сервере Linux
Как запустить локальный скрипт на удаленном сервере Linux
Удаленный запуск скрипта повторяющихся задач повышают эффективность системного администрирования. Это отлично подходит для локальных машин, но что если вы контролируете удаленные серверы? Можете ли вы запустить локальный скрипт на удаленном компьютере? Да!
Удаленные подключения
Удаленное администрирование системы обычно включает в себя подключение к удаленному компьютеру через защищенное соединение shell. Соединение SSH предоставляет вам командную строку на удаленном компьютере. После этого вы можете приступить к выполнению любых действий по обслуживанию системы.
Сценарии оболочки помогают, позволяя обернуть последовательность команд в сценарий, который может быть запущен как программа, объединяя множество действий в одну инструкцию командной строки.
Со временем вы будете дорабатывать и совершенствовать свои скрипты. Если у вас много удаленных машин, которые нужно администрировать, поддерживать копию каждого сценария на каждом сервере в актуальном состоянии — это боль и неприятные накладные расходы. Это само по себе становится административной задачей и съедает экономию времени, которую должно обеспечить использование скриптов.
Идеальное решение позволило бы вам хранить скрипты на локальной машине и запускать их на удаленных компьютерах через SSH-соединение. Это позволило бы упростить управление централизованной коллекцией сценариев, а один и тот же актуальный скрипт запускался бы на всех компьютерах.
Bash и SSH предоставляют возможность сделать именно это.
Беспарольные SSH-соединения
Лучший способ сделать это — беспарольные соединения с использованием SSH-ключей. Создав SSH-ключи на локальном компьютере и отправив их на каждый из удаленных компьютеров, вы сможете безопасно и удобно подключаться к удаленным компьютерам, не запрашивая каждый раз пароль.
Хотя они могут отпугнуть начинающих пользователей, ключи SSH на самом деле не сложны. Их легко сгенерировать, просто установить на удаленных серверах, а при использовании их с SSH не возникает никаких сложностей. Единственным условием является наличие на удаленных компьютерах SSH-демона sshd и учетной записи пользователя на удаленном компьютере.
Если вы уже выполняете на них удаленное администрирование системы, оба эти требования должны быть выполнены.
Чтобы сгенерировать пару ключей SSH, введите:
Если у вас есть учетная запись «dave» на компьютере под названием «fedora-36.local», вы можете установить на него свой открытый ключ SSH с помощью этой команды:
Теперь, установив SSH-соединение обычным способом, вы пройдете аутентификацию по SSH-ключам. Вы попадете в командную строку на удаленном сервере без запроса пароля.
Удаленный запуск локального скрипта
Для этих тестов мы используем наш удаленный сервер — это компьютер Linux под названием «fedora-36.local». Мы настроили SSH ключи и протестировали беспарольное подключение к удаленному серверу с нашего локального компьютера.
Наш скрипт очень прост. Он записывает временную метку в файл с именем «timestamp.txt» на удаленном сервере. Обратите внимание, что скрипт завершается командой exit. Это важно, поскольку на некоторых старых системах скрипт может быть выполнен до конца, но SSH-соединение остается открытым.
#!/bin/bash date >> timestamp.txt exit 0
Скопируйте этот текст в редактор, сохраните его как «local.sh», а затем используйте chmod, чтобы сделать его исполняемым.
На нашей локальной машине мы запустим скрипт следующим образом: