выполнить команду через соединение ssh [дубликат]

После нескольких часов поисков я смог решить эту проблему. Оказывается, это было установлено через DHCP:

nmcli -f ip4 device show eth0
IP4.ADDRESS[1]:                         172.31.53.162/20
IP4.GATEWAY:                            172.31.48.1
IP4.DNS[1]:                             172.31.0.2
IP4.DOMAIN[1]:                          ec2.internal

Я смог переопределить IP4.DOMAIN [1], переопределив значение ipv4.dns-search сетевого интерфейса:

nmcli connection modify uuid \`nmcli connection show --active | grep 802-3-ethernet | awk '{print $(NF-2)}' | tail -n 1` ipv4.dns-search d.sample.com

Или, проще говоря,

nmcli connection modify System\ eth0 ipv4.dns-search "d.sample.com"

Тогда у вас есть Чтобы перезапустить NetworkManager

systemctl restart NetworkManager.service

, я также обнаружил, что, поскольку я работал с экземпляром Amazon, мне нужно обновить файл cloud.cfg.

1
24.05.2016, 01:26
4 ответа

Это могло быть проще упростить команду, чтобы у вас было меньше специальных символов, которыми оболочка могла бы подавиться:

ssh jboss@myTargetServer 'ps -p $(cat /var/run/jboss-as/jboss-as-standalone8.pid) -o %cpu= 2>/dev/null'

Завершающий 2> / dev / null отбрасывает текст ошибки в том случае, если файл PID либо не может может быть найден или содержит устаревший PID.

3
27.01.2020, 23:14

Я бы рекомендовал поместить эти команды в сценарий, который вы вызываете удаленно с помощью ssh . В противном случае вам нужно было бы заключить всю «удаленную» часть командной строки в кавычки и правильно экранировать все внутри. Это может быть утомительно и чревато ошибками. Вот почему удаленный вызов скрипта.

2
27.01.2020, 23:14

Вторая команда в том виде, в котором она есть, запускает часть кода ( $ () ) в локальной подоболочке. Вам нужно заставить его работать на другой стороне, экранируя специальные символы (в основном $ ):

ssh jboss@myTargetServer tmpValue=\$(cat /var/run/jboss-as/jboss-as-standalone8.pid) \
 && top -b -U jboss -n 1 |grep \$tmpValue |awk '{print $9}'

или помещая все это в апострофы ' и экранируя внутренние:

ssh jboss@myTargetServer 'tmpValue=$(cat /var/run/jboss-as/jboss-as-standalone8.pid) \
 && top -b -U jboss -n 1 |grep \$tmpValue |awk \'{print $9}\''

Я не тестировал это, но это основная идея, что нужно сделать, чтобы это исправить.

1
27.01.2020, 23:14

Если вы действительно не хотите писать сценарии, вы можете найти здесь документ . Короче говоря, вы добавляете << SOMETEXMARKER в конец строки и продолжаете вводить столько команд для удаленного хоста, сколько хотите. Затем в последней строке, которую вы вводите (в самой начало строки) тот же SOMETEXTMARKER , заставляющий введенные команды выполняться удаленно

Вот пример

[bobby@bobby ~]$ ssh jimmy@jimmy << MRK '
> # single quote above makes all vars resolve on remote host
> echo remote user and host are : 
> echo $USER $(hostname)
> # entereing closing single quote
> '
> # finally entereing the marker
> MRK
remote user and host are :
jimmy jimmy
0
27.01.2020, 23:14

Теги

Похожие вопросы