Как поместить команду 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