尝试创建具有权限的 ftp 用户
trying to create a ftp user with permissions
所以我试图创建一个 ftp 用户并授予他对特定目录的权限,但没有创建该用户。当我回显命令时,目录已创建并且权限已授予用户,但是当我尝试使用创建的凭据登录时它不起作用。请看一下。我做错了什么?
$randomNum = substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyz"), 0, 8);
$randomPass = substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyz"), 0, 6);
$src = $request->path;
$dest = "/home/$randomNum";
echo $ssh->exec("mkdir $dest\n");
echo $ssh->exec("useradd -m -d $dest $randomNum\n");
echo $ssh->exec("passwd $randomNum\n");
echo $ssh->read('New password:');
echo $ssh->write($randomPass."\n");
echo $ssh->exec("nice -n 19 cp -Rf $src $dest && chown -Rf $randomNum:$randomNum $dest && exit\n");
$ssh->disconnect();
来自您的代码:
echo $ssh->exec("passwd $randomNum\n");
echo $ssh->read('New password:');
echo $ssh->write($randomPass."\n");
特别是对于该命令,您需要启用 PTY 模式才能使读取/写入工作。您可以通过在命令前执行 $ssh->enablePTY()
来执行此操作。但是,在命令后执行 $ssh->disablePTY()
可能不是一个坏主意。
此外,echo $ssh->write($randomPass."\n");
...这不会真正达到预期的效果。 $ssh->write
只是 returns true 或 false 取决于写入命令的成功或失败。
假设randomNum
是用户名,randomPass
是密码,dest
是主目录,
改变这个:
echo $ssh->exec("mkdir $dest\n");
echo $ssh->exec("useradd -m -d $dest $randomNum\n");
echo $ssh->exec("passwd $randomNum\n");
echo $ssh->read('New password:');
echo $ssh->write($randomPass."\n");
echo $ssh->exec("nice -n 19 cp -Rf $src $dest && chown -Rf $randomNum:$randomNum $dest && exit\n");
为此:
$ssh->exec("useradd -M " . $randomNum. " -d " . $dest);
$ssh->exec("echo \"" . $randomNum . ":" . $randomPass . "\" | sudo chpasswd");
$ssh->exec("chown -R " . $randomNum . ":" . $randomNum . " " . $dest);
所以我试图创建一个 ftp 用户并授予他对特定目录的权限,但没有创建该用户。当我回显命令时,目录已创建并且权限已授予用户,但是当我尝试使用创建的凭据登录时它不起作用。请看一下。我做错了什么?
$randomNum = substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyz"), 0, 8);
$randomPass = substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyz"), 0, 6);
$src = $request->path;
$dest = "/home/$randomNum";
echo $ssh->exec("mkdir $dest\n");
echo $ssh->exec("useradd -m -d $dest $randomNum\n");
echo $ssh->exec("passwd $randomNum\n");
echo $ssh->read('New password:');
echo $ssh->write($randomPass."\n");
echo $ssh->exec("nice -n 19 cp -Rf $src $dest && chown -Rf $randomNum:$randomNum $dest && exit\n");
$ssh->disconnect();
来自您的代码:
echo $ssh->exec("passwd $randomNum\n");
echo $ssh->read('New password:');
echo $ssh->write($randomPass."\n");
特别是对于该命令,您需要启用 PTY 模式才能使读取/写入工作。您可以通过在命令前执行 $ssh->enablePTY()
来执行此操作。但是,在命令后执行 $ssh->disablePTY()
可能不是一个坏主意。
此外,echo $ssh->write($randomPass."\n");
...这不会真正达到预期的效果。 $ssh->write
只是 returns true 或 false 取决于写入命令的成功或失败。
假设randomNum
是用户名,randomPass
是密码,dest
是主目录,
改变这个:
echo $ssh->exec("mkdir $dest\n");
echo $ssh->exec("useradd -m -d $dest $randomNum\n");
echo $ssh->exec("passwd $randomNum\n");
echo $ssh->read('New password:');
echo $ssh->write($randomPass."\n");
echo $ssh->exec("nice -n 19 cp -Rf $src $dest && chown -Rf $randomNum:$randomNum $dest && exit\n");
为此:
$ssh->exec("useradd -M " . $randomNum. " -d " . $dest);
$ssh->exec("echo \"" . $randomNum . ":" . $randomPass . "\" | sudo chpasswd");
$ssh->exec("chown -R " . $randomNum . ":" . $randomNum . " " . $dest);