Как поместить команду sshpass в скрипт bash?

Я пытаюсь запустить команду sshpass внутри скрипта bash, но она не работает.

Если я запускаю ту же команду из терминала, она работает нормально, но не запускается в bash-скрипте.

#! /bin/bash

sshpass -p 'password' ssh user@host command

Я знаю о проблемах безопасности, но сейчас это не важно.

Может кто-нибудь помочь? Я что-то пропустил.

Спасибо

5 ответов

Решение

Делать which sshpass в командной строке, чтобы получить абсолютный путь к sshpass и заменить его в скрипте bash.

Вы также должны, вероятно, сделать то же самое с command ты пытаешься бежать.

Проблема может заключаться в том, что он не находит его.

Попробуйте параметр "-o StrictHostKeyChecking = no" для ssh("-o" - флаг, указывающий ssh, что вы собираетесь использовать этот параметр). Это принимает любой входящий ключ RSA из вашего ssh-соединения, даже если ключ отсутствует в списке "известных хостов".

sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@host 'command'

1 - You can script sshpass's ssh команда как это:

#!/bin/bash

export SSHPASS=password
sshpass -e ssh -oBatchMode=no user@host

2 - You can script sshpass"s sftp commandlike this:

#!/bin/bash

export SSHPASS=password

sshpass -e sftp -oBatchMode=no -b - user@host << !
   put someFile
   get anotherFile
   bye
!

Я не понимаю, как принятый ответ отвечает на реальный вопрос о том, как выполнять какие-либо команды на сервере после того, как sshpass передается из файла сценария bash. По этой причине я даю ответ.


После предоставленных вами команд сценария выполните дополнительные команды, как показано ниже:

sshpass -p 'password' ssh user@host "ls; whois google.com;" #or whichever commands you would like to use, for multiple commands provide a semicolon ; after the command

В вашем скрипте:

#! /bin/bash

sshpass -p 'password' ssh user@host "ls; whois google.com;"

Это сработало для меня:

#!/bin/bash

#Variables
FILELOCAL=/var/www/folder/$(date +'%Y%m%d_%H-%M-%S').csv    
SFTPHOSTNAME="myHost.com"
SFTPUSERNAME="myUser"
SFTPPASSWORD="myPass"
FOLDER="myFolderIfNeeded"
FILEREMOTE="fileNameRemote"

#SFTP CONNECTION
sshpass -p $SFTPPASSWORD sftp $SFTPUSERNAME@$SFTPHOSTNAME << !
    cd $FOLDER
    get $FILEREMOTE $FILELOCAL
    ls
   bye
!

Вероятно, вам нужно установить sshpass:

sudo apt-get install sshpass
Другие вопросы по тегам