De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Conexões FTP sobre SSH
Colaboração: Marcos Aguinaldo Forquesato
Data de Publicação: 26 de Abril de 1998
Estou anexando a esta mensagem um shell script, usando expect,
para viabilizar conexões FTP sobre sessões com SSH.
Hello SSH users,
In the FAQ of SSH it is mentioned that FTP over SSH can be used. Sure, but it
is a little bit unfriendly to use. First you have to establish an SSH
connection, then the FTP connection over it, etc. To automate this process
I've written a short Expect-based script named "sshftp".
Its usage is simple and looks like this:
:> sshftp taz.apache.org
This is FTP-over-SSH, 1.0
Username: rse
Password:
Connecting to rse@taz.apache.org:
+ opening SSH background session
+ opening FTP foreground session over SSH
+ switching SSH background session into hangup mode
+ login to FTP foreground session
+ switching to FTP data sessions to passive mode
FTP over SSH login to rse@taz.apache.org successful.
ftp> ls
227 Entering Passive Mode (204,62,130,149,9,249)
150 Opening ASCII mode data connection for /bin/ls.
total 206
-rw-r--r-- 1 rse wheel 165 Aug 8 1997 README
drwxr-xr-x 3 rse wheel 512 Jul 11 1997 arc
drwxr-xr-x 2 rse wheel 512 Jul 25 1997 bin
drwxr-xr-x 2 rse wheel 512 Jul 11 1997 etc
drwxrwxr-x 2 rse wheel 512 Dec 22 00:33 mirror
drwxr-xr-x 4 rse wheel 512 Nov 22 01:25 public_html
drwxr-xr-x 12 rse wheel 512 Aug 9 1997 sw
drwxr-xr-x 3 rse wheel 512 Apr 11 05:08 tmp
226 Transfer complete.
ftp> bye
221 Goodbye.
FTP over SSH connection closed
rse@en1:/u/rse
:>
Feel free to use it, because for this I post it here. I'm not subscribed to
this list, so please use an additional carbon-copy for me when replying.
Greetings,
Ralf S. Engelschall
rse@engelschall.com
www.engelschall.com
#!/usr/local/bin/expect
##
## sshftp -- FTP over SSH
## Copyright (c) 1998 Ralf S. Engelschall, <rse@engelschall.com>
##
## Usage: sshftp [<hostname> [<port>]]
##
set myname "FTP-over-SSH"
set myversion "1.0"
# configuration
set shell_prompt "(%|#|\\\$|:>) "
set ftp_prompt "(ftp)?>"
set localport 21021
# program message
send_user "This is $myname, $myversion\n"
# determine parameters
if $argc<1 {
send_user "Hostname: "
expect_user -re "(.*)\n"
set hostname $expect_out(1,string)
} else {
set hostname [lindex $argv 0]
}
if $argc<2 {
set hostport 21
} else {
set hostport [lindex $argv 1]
}
send_user Üsername: "
expect_user -re "(.*)\n"
set username $expect_out(1,string)
send_user "Password: "
stty -echo
expect_user -re "(.*)\n"
send_user "\n"
stty echo
set password $expect_out(1,string)
# global parameters
set timeout 60
log_user 0
send_user "Connecting to $username@$hostname:\n"
# create SSH layer
send_user " + opening SSH background session\n"
eval spawn -noecho ssh -x -l $username -L $localport:$hostname:$hostport $hostname
set ssh_id $spawn_id
expect -i $ssh_id -re $shell_prompt
# create FTP layer
send_user " + opening FTP foreground session over SSH\n"
eval spawn -noecho ftp localhost $localport
set ftp_id $spawn_id
expect -i $ftp_id -re "Name.*:"
# logout from interactive SSH terminal session
# (SSH automatically waits until the FTP session is closed)
send_user " + switching SSH background session into hangup mode\n"
send -i $ssh_id "logout\r"
# login to FTP session
send_user " + login to FTP foreground session\n"
send -i $ftp_id "$username\r"
expect -i $ftp_id "sword:"
send -i $ftp_id "$password\r"
# switch to passive connect type
send_user " + switching to FTP data sessions to passive mode\n"
expect -i $ftp_id -re $ftp_prompt
send -i $ftp_id "passive\r"
# switch to user interaction
send_user "FTP over SSH login to $username@$hostname successful."
expect -i $ftp_id -re $ftp_prompt
log_user 1
send -i $ftp_id "\r"
interact
# finally exit gracefully
wait
send_user "FTP over SSH connection closed\n"