How can I use a voltage to control the pulse width of a 555?
This is definitely a task for a microcontroller, but if you are bound not to use one...

PWM signals can be generated by creating a triangle wave, and taking the output of a comparator, which has the reference input set by the control input. 

This image is from here

To get your control input a simple RC integrator is all that is needed, given that the control PWM is so much higher than the output.

Since you mention using the venerable NE555, there's a section in the datasheet (section 9.2.2) that describes a PWM generator. Since this uses just the standard RC arrangement, the triangle wave isn't exactly linear, it's the exponential decay, but if you use a small enough ratio of the trigger voltages to the supply voltage, the linearity is tolerable.


The datasheet example requires a clock for the PWM generator, which you can do with a second 555 - the 556 is a 2 in 1 package to minimize component count.