[RUBY] Connectez le port en avant avec SSH pour envoyer et recevoir des fichiers

environnement

Ubuntu 16.04.7 LTS (Xenial Xerus) ruby 2.5.0p0

Que veux-tu faire

Après avoir transféré le programme Ruby vers le serveur spécifié par la redirection de port, exécutez le programme Ruby sur le serveur de destination du transfert et sortez le fichier csv en standard. Ensuite, apportez le fichier csv de sortie standard à votre environnement local.

code

def ssh_connect

    begin
     #Transférer des fichiers
        _cmd = system('scp -P 54322 -i /home/.ssh/id_rsa /home/syori.rb [email protected]:/home')

        #Paramètres de transfert de port
        Net::SSH.start(
            '153.153.xx.xx',
            'username',
            :keys => '/home/.ssh/id_rsa',
            :port => 54322
            ) do |_a|
                _a.forward.local(2222,'192.168.xx.xx', 54323)
                _a.exec!('ruby syori.rb')
              end

        #Obtenez le fichier
        _cmd = system('scp -P 54322 -i /home/.ssh/id_rsa [email protected]:/home/users.csv /home')

    rescue => ex
        print "***** " + self.class.name.to_s + "." + __method__.to_s + " *****\n"
        print(ex.class," -> ",ex.message)
    end
end

Commentaire

system Une méthode qui émet des commandes Linux dans Ruby. La valeur de retour est ture / false.

scp Il s'agit d'une commande (protocole) de transfert de fichiers. En ce qui concerne le transfert de fichiers, je pense que ftp était souvent utilisé dans le passé, mais comme ftp ne peut pas crypter les informations du compte lors de la connexion, utilisez scp, qui est équipé de la fonction SSH en standard, pour améliorer la sécurité. Est la base.

options scp

-P Spécifiez le numéro de port. Le numéro de port SSH 22 est spécifié comme un numéro de port bien connu, mais s'il s'agit d'un serveur ouvert sur l'extérieur, je pense qu'il peut être personnalisé pour éviter des attaques étranges. Spécifiez le numéro de port SSH du serveur auquel se connecter.

-i Définissez le chemin absolu vers le chemin où la clé publique utilisée pour la communication SSH est stockée. Principalement situé dans votre maison .ssh.

Définissez le nom du fichier à transférer avec un chemin absolu. Pour spécifier la destination du transfert, spécifiez le nom du serveur de la destination du transfert: le répertoire de la destination du transfert avec un chemin absolu.

Explication de la redirection de port

Net::SSH.start(
Transférer l'adresse IP source, 
Nom d'utilisateur de transfert,
     :keys =>Chemin absolu de la clé privée de la source de connexion,
     :port =>Numéro de port de la source de connexion
     ) do |_a|
         _a.forward.local(Transférer le numéro de port source (tout va bien),
                  'Adresse IP de la destination de transfert de port', 
Transférer le numéro de port de destination)
         _a.exec!('La commande que vous souhaitez exécuter à la destination de la connexion')
     end

Recommended Posts

Connectez le port en avant avec SSH pour envoyer et recevoir des fichiers
Connectez-vous de l'hôte local à l'hôte distant JMX via la redirection de port SSH
Etude Swift Network.framework 20200319 "Recevoir et envoyer"
Faites glisser et déposez des fichiers avec JavaFX
Installez Ubuntu Server 20.04 dans VirtualBox sur Mac et établissez une connexion SSH
[Débutant] Téléchargez des images et des fichiers avec Spring [Autosuffisant]
[Review] Lecture et écriture de fichiers avec java (JDK6)
Créez une clé privée / clé publique dans CentOS8.2 et connectez-vous à SSH avec VS Code