Server IP : 103.119.228.120 / Your IP : 3.17.76.174 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /scripts/ |
Upload File : |
#!/usr/local/cpanel/3rdparty/bin/perl # cpanel - scripts/transfer_accounts_as_root Copyright 2022 cPanel, L.L.C. # All rights reserved. # copyright@cpanel.net http://cpanel.net # This code is subject to the cPanel license. Unauthorized copying is prohibited package scripts::transfer_accounts_as_root; use cPstrict; =encoding utf-8 =head1 USAGE transfer_accounts_as_root --host=the.source --user=hank =head1 DESCRIPTION This utility transfers one or more accounts from a remote server to the local one. The parameters are: =over =item * C<--host> - The remote (source) hostname or IP address. Required. =item * C<--user> - The name of a user to transfer. May be given multiple times. =item * C<--sshkey> - (optional) The name of the C<root> user’s SSH key to use to log in on the remote server. This takes the place of password authentication. =item * C<--session> - (optional) An argument, in C<key=value> format, to give to the C<create_remote_root_transfer_session> API call. May be given 0 or more times. =item * C<--enqueue> - (optional) An argument, in C<key=value> format, to give to the C<enqueue_transfer_item> API call. May be given 0 or more times. =back =head1 AUTHENTICATION This script supports the following authentications: =over =item * Password for C<root>, given on STDIN. =item * SSH key for C<root>, named as the C<--sshkey> argument. The key’s passphrase is given on STDIN. =back =head1 CAVEATS (B<IMPORTANT!>) This script is a simple interface to WHM’s account-transfer APIs. As such, it exhibits some important differences from WHM’s “Transfer Tool”: =over =item * “Live Transfer” mode is B<disabled> by default. To enable it, pass C<--enqueue=live_transfer=1>. =item * By default a transfer requires either SSH access or valid TLS on the remote (source) server. If neither is available, instruct the transfer session to attempt invalid TLS by passing C<--session=comm_transport=whostmgr_insecure> to this script. =item * SSH access to the rem =item * There are fewer “guard rails” in place. For example, as of this writing the system will enqueue a transfer of an account that doesn’t actually exist on the source server. (Future cPanel & WHM versions may improve on this.) =back =head1 SEE ALSO F</usr/local/cpanel/scripts/transfer_account_as_user> is like this script but authenticates to the source server as the user. =cut #---------------------------------------------------------------------- use parent qw( Cpanel::CLI::TransferAccounts ); __PACKAGE__->new(@ARGV)->run() if !caller; use constant _OPTIONS => ( __PACKAGE__->SUPER::_OPTIONS(), 'user=s@', 'sshkey=s', ); #---------------------------------------------------------------------- sub run ($self) { my ( $host, $usernames_ar ) = $self->parse_opts(); my $authn_username = 'root'; my ( $prompt, $prompt_var, @authn_args ); if ( my $sshkey_name = $self->getopt('sshkey') ) { push @authn_args, ( sshkey_name => $sshkey_name ); if ( _does_key_need_passphrase($sshkey_name) ) { $prompt = "Enter “$sshkey_name”’s passphrase:"; $prompt_var = 'sshkey_passphrase'; } else { $self->say("“$sshkey_name” is unencrypted, so no passphrase is needed."); } } else { $prompt = "Enter “$authn_username”’s password on “$host”:"; $prompt_var = 'password'; } if ($prompt) { my $secret = $self->get_secret($prompt); push @authn_args, ( $prompt_var => $secret ); } #---------------------------------------------------------------------- my $guard = $self->create_session_and_aborter( 'create_remote_root_transfer_session', { user => $authn_username, host => $host, @authn_args, }, ); $self->enqueue_users( 'AccountRemoteRoot', $usernames_ar ); $self->do_transfer_and_finish(); return; } sub _does_key_need_passphrase ($keyname) { require Cpanel::SSH; my ($keys_ar) = Cpanel::SSH::_listkeys( private => 1, public => 0, ); my $key_data_hr; for my $key_hr (@$keys_ar) { next if $key_hr->{'file'} ne $keyname; $key_data_hr = $key_hr; last; } if ( !$key_data_hr ) { my @keynames = sort map { $_->{'file'} } @$keys_ar; my $msg = join( "\n", "No key exists named “$keyname”.", q<>, "Available keys are:", ( map { "\t• $_" } @keynames ), q<>, ); die $msg; } return $key_data_hr->{'encrypted'}; } # Needed for Cpanel::SSH sub main::hasfeature { return 1; } 1;