ich habe aber noch nicht versucht ein kennwort ins ssh zu pipen... und das ssh kommando hat (soweit ich sehe) keine möglichkeit das kennwort im klartext mitzugeben...
Dein Freund (und Feind zugleich) heisst SSH_ASKPASS.
SSH_ASKPASS
If ssh needs a passphrase, it will read the passphrase
from the current terminal if it was run from a termi-
nal. If ssh does not have a terminal associated with
it but DISPLAY and SSH_ASKPASS are set, it will execute
the program specified by SSH_ASKPASS and open an X11
window to read the passphrase. This is particularly
useful when calling ssh from a .xsession or related
script. (Note that on some machines it may be neces-
sary to redirect the input from /dev/null to make this
work.)
Der ssh-Prozess muss unbedingt glauben kein Terminal zu haben. Ist gar nicht so einfach das hinzubekommen, nur /dev/null auf den Input zu legen reicht unter Solaris definitiv nicht. Ausserdem
muss die Variable DISPLAY gesetzt sein. Der Wert ist egal, es wird auch erstmal nichts mit X gemacht, nur ohne geht es einfach nicht. (Eigentlicher Sinn von SSH_ASKPASS ist zwar für die Passwortabfrage ein X-Fenster zu öffnen, aber es geht auch ohne.)
Ich hatte vor ein paar Jahren das zweifelhafte Vergnügen ein entsprechendes Skript für ein "automatisiertes" SFTP mit Passwort erstellen zu müssen.
Vielleicht eignet sich dieses Fragment als Grundlage:
# (1) Create command script for SFTP
#
echo "cd ${DEST_DIR}" > ${BASE_DIR}/ctrl/SFTP_cmd.in
echo "pwd" >> ${BASE_DIR}/ctrl/SFTP_cmd.in
echo "put ${PROC_FILE} ${DEST_NAME}.tmp" >> ${BASE_DIR}/ctrl/SFTP_cmd.in
echo "rename ${DEST_NAME}.tmp ${DEST_NAME}" >> ${BASE_DIR}/ctrl/SFTP_cmd.in
echo "quit" >> ${BASE_DIR}/ctrl/SFTP_cmd.in
# ----------------------------------------------
# (2) Create an executable script that prints the password
#
echo "#!/bin/sh" > ${BASE_DIR}/ctrl/pass$$.sh
chmod 700 ${BASE_DIR}/ctrl/pass$$.sh
echo "echo $SFTP_PASSWD" >> ${BASE_DIR}/ctrl/pass$$.sh
# ----------------------------------------------
# (3) Set SSH_ASKPASS and DISPLAY for non-interactive SFTP
#
DISPLAY=anything
SSH_ASKPASS=${BASE_DIR}/ctrl/pass$$.sh
export DISPLAY SSH_ASKPASS
# ----------------------------------------------
# (4) Call sftp
#
echo "Start SFTP to IP address: ${DEST_IP_ADDRESS}"
# Use setpgrp to make sftp a process group leader (this detatches it
# from the terminal, which is required for SSH_ASKPASS to be honoured)
#
# On other systems (e.g. Linux) use setsid which has the same effect as setpgrp.
#
setpgrp sftp -b ${BASE_DIR}/ctrl/SFTP_cmd.in -o LogLevel=error ${SFTP_USER}@${DEST_IP_ADDRESS} </dev/null 2> ${BASE_DIR}/log/sftp_sap.log
# If Batch mode (-b) causes problems try redirecting the commands to stdin instead:
#
# setpgrp sftp -o LogLevel=error ${SFTP_USER}@${DEST_IP_ADDRESS} <SFTP_cmd.in 2>sftp_sap.log
rm -f ${BASE_DIR}/ctrl/pass$$.sh