2016-06-30 8 views
0

Ich versuche, die Dateiübertragung oder FTP von einem Server zum anderen zu automatisieren.sshpass: Befehl nicht gefunden Fehler

#!/bin/bash 
### In this model, the same filename is processed on each run. 
### A timestamp is added to the result file and data file is copied to the archive or error folder with a timestamp after processing. 

# Set current directory 
cd `dirname "$0"` 

# Set the environment variables 
. ./Environment.sh $0 

####################################################################################################### 
# 
####################################################################################################### 


FILE=/hcm/Inbound/file.csv 

sshpass -p 'xyz' sftp -oBatchMode=no -b - -oStrictHostKeyChecking=no [email protected] <<_EOF_ 

cd /upload/ 

put $FILE 

_EOF_ 

# Exit 
exit $? 

Wenn ich diesen Shell-Skript bin Ausführung Ich erhalte die folgenden Fehler in Kitt:

-bash: sshpass: command not found 

Ich versuchte, die ssh passwordless Methode von ssh-keygen -t dsa und anderen Schritten, aber ich kann nicht auf Kitt der zweiten Server, aufgrund dessen ich die nächsten Schritte nicht ausführen kann.

Bitte helfen

+0

"Kann Kitt des zweiten Servers nicht zugreifen"? Pardon? Sie können passwortloses SSH über mehrere Hops verwenden, indem Sie Ihren Schlüssel in einen Agenten laden (nebenbei werden RSA-Schlüssel gegenüber DSA bevorzugt) und das Weiterleiten von Agenten aktivieren. Sie müssen keinen privaten Schlüssel auf Ihren Bounce-Hosts haben. –

+0

Nebenbei, 'exit $?' Ist völlig redundant: 'exit' durchläuft standardmäßig den Exit-Status des unmittelbar vorherigen Befehls. Außerdem fehlt hier ein bisschen Quoting - was http://shellcheck.net/ identifizieren wird. –

Antwort

11

Sie sshpass auf dem Client-Server installieren müssen Sie laufen Ihre Code, in dem ist ein Werkzeug, das nicht standardmäßig auf den meisten Linux-Distribution

installiert ist, wenn Sie sind in Ubuntu verwenden Sie diesen Befehl

apt-get install sshpass

auf CentOS/Redhat diese EPEL

wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -ivh epel-release-6-8.noarch.rpm

installieren sshpass

yum --enablerepo=epel -y install sshpass

Dank

+0

-bash: apt-get: Befehl nicht gefunden Erhalte diesen Fehler –

+0

Ich habe die Antwort bearbeitet, um die Art der Installation in Centos/redhat einzuschließen, welche os verwenden Sie? – Hani

+0

Geladene Plugins: Refresh-Paketkit, Sicherheit Fehler beim Abrufen von Repository-Daten für Epel, Repository nicht gefunden –

2

NO installieren verwenden !!!! Installieren Sie sshpass nicht. Es ist das falsche Werkzeug für Ihren Job.

Es wurde nicht für Ihren Anwendungsfall geschrieben, und wenn Sie es verwenden, wird Ihr Skript erheblich weniger sicher sein, als es sein kann. Ich sollte wissen, wovon ich rede. Ich schrieb es.

Führen Sie stattdessen Ihren Server mit Debugging-Informationen aus und ermitteln Sie, warum Sie die schlüsselbasierte Authentifizierung nicht einrichten konnten. Es ist vorzuziehen, sshpass in jeder möglichen Weise zu verwenden.

+0

Ich habe keinen Zugang zu Kitt auf Server 2 –

+0

Dann googeln Sie "Einrichten der Authentifizierung mit öffentlichen Schlüsseln", und Sie führen ssh mit '-vv', um zu sehen, welche Authentifizierungsmethoden es versucht, und wenn alles andere fehlschlägt, fragen Sie warum public Schlüssel funktioniert nicht (unter der Annahme, dass keine der 7,283,093 anderen Zeiten Leute fragten, dass genau diese Frage Ihnen nicht geholfen hat). Sie verwenden 'sshpass' nicht, wenn öffentliche Schlüssel auth möglich ist. –

+0

Danke! Was Hani vorgeschlagen hat funktioniert! Also ich denke meine Frage wird beantwortet :) –