Net::OpenSSH + readme + script pour les libs et modules nécessaires

master
Philippe Pittoli 2014-03-04 00:45:33 +01:00
parent 0d6d8db6dd
commit 1c00314b33
8 changed files with 96 additions and 55 deletions

View File

@ -17,7 +17,7 @@ use Moose;
has dbh => ( is => 'rw', builder => '_void'); has dbh => ( is => 'rw', builder => '_void');
has dnsi => ( is => 'rw', builder => '_void'); has dnsi => ( is => 'rw', builder => '_void');
has um => ( is => 'rw', builder => '_void'); has um => ( is => 'rw', builder => '_void');
has [ qw/zdir dbname dbhost dbport dbuser dbpass sgbd dnsapp sshhost sshuser/ ] => qw/is ro required 1/; has [ qw/zdir dbname dbhost dbport dbuser dbpass sgbd dnsapp sshhost sshuser sshport/ ] => qw/is ro required 1/;
sub _void { my $x = ''; \$x; } sub _void { my $x = ''; \$x; }
### users ### users
@ -94,7 +94,8 @@ sub add_domain {
my $ze = app::zone::edit->new(zname => $domain my $ze = app::zone::edit->new(zname => $domain
, zdir => $self->zdir , zdir => $self->zdir
, host => $self->sshhost , host => $self->sshhost
, user => $self->sshuser ); , user => $self->sshuser
, port => $self->sshport );
$ze->addzone(); $ze->addzone();
} }
@ -109,7 +110,8 @@ sub delete_domain {
my $ze = app::zone::edit->new(zname => $domain my $ze = app::zone::edit->new(zname => $domain
, zdir => $self->zdir , zdir => $self->zdir
, host => $self->sshhost , host => $self->sshhost
, user => $self->sshuser ); , user => $self->sshuser
, port => $self->sshport );
$ze->del(); $ze->del();
1; 1;
@ -121,7 +123,8 @@ sub update_domain_raw {
my $ze = app::zone::edit->new(zname => $domain my $ze = app::zone::edit->new(zname => $domain
, zdir => $self->zdir , zdir => $self->zdir
, host => $self->sshhost , host => $self->sshhost
, user => $self->sshuser ); , user => $self->sshuser
, port => $self->sshport );
$ze->update_raw($zone); $ze->update_raw($zone);
} }
@ -130,7 +133,8 @@ sub update_domain {
my $ze = app::zone::edit->new(zname => $domain my $ze = app::zone::edit->new(zname => $domain
, zdir => $self->zdir , zdir => $self->zdir
, host => $self->sshhost , host => $self->sshhost
, user => $self->sshuser ); , user => $self->sshuser
, port => $self->sshport );
$ze->update($zone); $ze->update($zone);
} }
@ -139,7 +143,8 @@ sub get_domain {
my $ze = app::zone::edit->new(zname => $domain my $ze = app::zone::edit->new(zname => $domain
, zdir => $self->zdir , zdir => $self->zdir
, host => $self->sshhost , host => $self->sshhost
, user => $self->sshuser ); , user => $self->sshuser
, port => $self->sshport );
$ze->get(); $ze->get();
} }
@ -165,7 +170,8 @@ sub new_tmp {
my $ze = app::zone::edit->new(zname => $domain my $ze = app::zone::edit->new(zname => $domain
, zdir => $self->zdir , zdir => $self->zdir
, host => $self->sshhost , host => $self->sshhost
, user => $self->sshuser ); , user => $self->sshuser
, port => $self->sshport );
$ze->new_tmp(); $ze->new_tmp();
} }

View File

@ -2,7 +2,7 @@ use Modern::Perl;
use Data::Dump "dump"; use Data::Dump "dump";
use DNS::ZoneParse; use DNS::ZoneParse;
use File::Copy; use File::Copy;
use Net::SCP; use Net::OpenSSH;
use Net::SSH q<sshopen2>; use Net::SSH q<sshopen2>;
use v5.14; use v5.14;
@ -11,7 +11,7 @@ use app::zone::rndc_interface;
package app::zone::edit; package app::zone::edit;
use Moose; use Moose;
has [ qw/zname zdir host user/ ] => qw/is ro required 1/; has [ qw/zname zdir host user port/ ] => qw/is ro required 1/;
sub get { sub get {
my ($self) = @_; my ($self) = @_;
@ -140,15 +140,17 @@ sub _cp {
sub _scp_put { sub _scp_put {
my ($self, $src, $dest) = @_; my ($self, $src, $dest) = @_;
my $scp = Net::SCP->new( { host => $self->host, user => $self->user } ); my $co = $self->user . '@' . $self->host . ':' . $self->port;
$scp->put($src, $dest) or die $scp->{errstr}; my $ssh = Net::OpenSSH->new($co);
$ssh->scp_put($src, $dest) or die "scp failed: " . $ssh->error;
} }
sub _scp_get { sub _scp_get {
my ($self, $src, $dest) = @_; my ($self, $src, $dest) = @_;
my $scp = Net::SCP->new( { host => $self->host, user => $self->user } ); my $co = $self->user . '@' . $self->host . ':' . $self->port;
$scp->get($src, $dest) or die $scp->{errstr}; my $ssh = Net::OpenSSH->new($co);
$ssh->scp_get($src, $dest) or die "scp failed: " . $ssh->error;
} }
sub _sed { sub _sed {

32
get_libs.sh Executable file
View File

@ -0,0 +1,32 @@
#!/bin/bash
sudo apt-get update
sudo apt-get install libssl1.0.0 libssl-dev cpanminus make gcc
## En attendant de faire de vrais paquets pour l'application
cpanm YAML
cpanm Data::Dump
cpanm File::Basename
cpanm Find::Lib
cpanm Test::More
cpanm String::ShellQuote
cpanm Data::Structure::Util
cpanm Modern::Perl
cpanm Config::Simple
cpanm Crypt::Digest::SHA256
cpanm Dancer::Session::Storable
cpanm Moose
cpanm Template
cpanm Template::Toolkit
cpanm Dancer
cpanm Dancer::Test
cpanm ExtUtils::MakeMaker
cpanm Storable
cpanm Plack::Handler::FCGI
cpanm Plack::Runner
cpanm DNS::ZoneParse
cpanm Net::OpenSSH

View File

@ -1,31 +1,21 @@
## FR trame du projet / TODO / brainstorming / brouillon Gérer la création de zones par des utilisateurs.
Les utilisateurs s'enregistrent, crééent des zones et les modifient comme ils le souhaitent.
### page d'inscription Des administrateurs peuvent supprimer des utilisateurs avec leurs zones.
* login
* captcha -- todo
### utilisateurs
* un login
* des domaines
* un mdp chiffré -- todo
* peuvent modifier leurs zones -- todo
* leur compte doit être activé par un admin -- todo
* réservation d'un ou plusieurs ndd en X.DOMAIN.TLD -- todo
* vérifier qu'ils ne sont pas déjà réservés ou attribués -- todo
### admins
* Valident les comptes des utilisateurs. -- todo
* en activant une zone d'un utilisateur. -- todo
* Doit être automatisé. -- todo
* Créent et suppriment d'autres administrateurs. -- todo
* Possèdent une page pour voir les comptes non activés. -- todo
## outils ## outils
* [Dancer](http://perldancer.org/)
* [DNS::ZoneParse](http://search.cpan.org/~mschilli/DNS-ZoneParse-1.10/lib/DNS/ZoneParse.pm) * [Dancer](http://perldancer.org/)
* [Bootstrap](http://twitter.github.io/bootstrap/) -- todo * [DNS::ZoneParse](http://search.cpan.org/~mschilli/DNS-ZoneParse-1.10/lib/DNS/ZoneParse.pm)
* [DBD::mysql](https://metacpan.org/module/DBD::mysql) * [Bootstrap](http://twitter.github.io/bootstrap/) -- todo
* [Net::HTTPS::Any](https://metacpan.org/module/IVAN/Net-HTTPS-Any-0.10/lib/Net/HTTPS/Any.pm) -- todo * [DBD::mysql](https://metacpan.org/module/DBD::mysql)
* [Moose](https://metacpan.org/module/ETHER/Moose-2.0802/lib/Moose.pm) * [Moose](https://metacpan.org/module/ETHER/Moose-2.0802/lib/Moose.pm)
* voir pour le chiffrement * [Crypt::Digest::SHA256](http://search.cpan.org/~mik/CryptX-0.021/lib/Crypt/Digest/SHA256.pm)
## TODO
* captcha
* demander confirmation avant suppression d'une zone
Si on souhaite faire un client pour mettre à jour automatiquement une zone avec son IP:
* [Net::HTTPS::Any](https://metacpan.org/module/IVAN/Net-HTTPS-Any-0.10/lib/Net/HTTPS/Any.pm)

View File

@ -4,13 +4,19 @@ use warnings;
use v5.14; use v5.14;
use autodie; use autodie;
use Modern::Perl; use Modern::Perl;
use Net::SCP; use Net::OpenSSH;
my $hostname = "pizza"; my $hostname = "ns0.arn-fai.net";
my $username = "karchnu"; my $username = "dnsmanager";
my $scp = Net::SCP->new( { host => $hostname, user => $username } ); my $co = "$username\@$hostname:2222";
$scp->get("/etc/resolv.conf", "kikoo") or die $scp->{errstr};
$scp->put("kikoo", "lolwat") or die $scp->{errstr};
say $co;
my $ssh = Net::OpenSSH->new($co);
$ssh->scp_put("tpl.zone", "/home/$username/") or die "scp failed: " . $ssh->error;
#use Net::SCP; # ne fonctionne pas avec des ports :/
#my $scp = Net::SCP->new( { host => $hostname, user => $username, port => 2222} );
#$scp->put("tpl.zone", "lolwat") or die $scp->{errstr};
# $scp->put("filename") or die $scp->{errstr}; # $scp->put("filename") or die $scp->{errstr};

View File

@ -1,6 +1,6 @@
; ;
; Database file tpl.zone for tpl.zone. zone. ; Database file tpl.zone for tpl.zone. zone.
; Zone version: 2014011815 ; Zone version: 2014030200
; ;
$ORIGIN CHANGEMEORIGIN. $ORIGIN CHANGEMEORIGIN.
@ -8,7 +8,7 @@ $ORIGIN CHANGEMEORIGIN.
$TTL 3600 $TTL 3600
@ 3600 IN SOA ns0.netlib.re. postmaster.netlib.re. ( @ 3600 IN SOA ns0.netlib.re. postmaster.netlib.re. (
2014011815 ; serial number 2014030200 ; serial number
3600 ; refresh 3600 ; refresh
600 ; retry 600 ; retry
86400 ; expire 86400 ; expire
@ -16,3 +16,5 @@ $TTL 3600
) )
; ;
; Zone NS Records ; Zone NS Records
@ IN NS ns0.arn-fai.net.

View File

@ -9,13 +9,15 @@ host = localhost
# default port for mysql # default port for mysql
port = 3306 port = 3306
user = bla user = monutilisateur
passwd = HardPass4bla passwd = motdepasse
# other options : see DBI module # other options : see DBI module
# possible options for dnsserver : bind rndc # possible options for dnsserver : bind rndc
dnsapp = rndc dnsapp = rndc
zones_path = "/etc/bind/named/" zones_path = "/var/named/rndczones/"
sshhost = localhost # to access zones on the server
sshuser = karchnu sshhost = host
sshuser = dnsmanager
sshport = 2222

View File

@ -41,6 +41,7 @@ sub initco {
, sgbd => $cfg->param('sgbd') , sgbd => $cfg->param('sgbd')
, sshhost => $cfg->param('sshhost') , sshhost => $cfg->param('sshhost')
, sshuser => $cfg->param('sshuser') , sshuser => $cfg->param('sshuser')
, sshport => $cfg->param('sshport')
, dnsapp => $cfg->param('dnsapp') ); , dnsapp => $cfg->param('dnsapp') );
$app->init(); $app->init();